python勾股数_勾股数-随心随性无为而为-51CTO博客
問題描述:
所謂勾股數,一般是指能夠構成直角三角形3條邊的3個正整數(a,b,c)。
即a2+b2=c2,a,b,cΣN
求1000以內的勾股數。
我的思路:使用for循環列出所有的數,連續判斷是否滿足a2+b2=c2關系,滿足的就是勾股數,但是要注意,三個數中任意一個都不可以為0,且重復的如3,4,5和4,3,5要去除,只留下其中一個;
我的代碼:for?i?in?range(1,1000):
for?j?in?range(i+1,1000):
for?k?in?range(1000):
if?i**2+j**2==k**2:
print?i,j,k
示例代碼:import?math
for?a?in?range(1,?1000):
for?b?in?range(a?+?1,?1000):
c?=?math.sqrt(a?*?a?+?b?*?b)
if?c?>?1000:
break
if?c.is_integer():
print?a,?b,?int(c)
代碼分析:想來想去也就想到了這個寫法,但是很明顯,我的代碼很臃腫,運行速度非常慢,效率也非常低,畢竟基數大,還用了三個for循環。
而示例代碼明顯比我的高效,它只循環了兩次,使用math模塊的sqrt函數求得a2+b2的平方根值(注意該值的類型為浮點型,不是整型),然后判斷該值是否在1000以內,并且判斷該值是否為有限的浮點型數,如果是就打印出a,b和整型化的c;
總結:math模塊的函數說明
2.關于is_integer的說明:
is_integer就是判斷一個浮點數是否是有限的,如果是就返回True,否則返回False;
總結
以上是生活随笔為你收集整理的python勾股数_勾股数-随心随性无为而为-51CTO博客的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Educational Codeforc
- 下一篇: python arp断网攻击_arp断网