python基礎練習題(一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?)


day2

---------------------------------------------------------------

實例003:完全平方數

題目: 一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?

 

仿佛不會思考,直接上手寫。。。

1 k = 10001
2 for i in range(0,k):
3     for j in range(0,k):
4         if j*j ==(i+100):
5             for k in range(0,k):
6                 if k*k ==(i+268):
7                     print(i)
8                     continue

嗯,假裝找到幾個值,但這代碼看得自己想吐,效率真TM慢,真low

標准答案

思路是:最壞的結果是n的平方與(n+1)的平方剛好差168,由於是平方的關系,不可能存在比這更大的間隙。至於判斷是否是完全平方數,最簡單的方法是:平方根的值小數為0即可。

結合起來:

1 n=0
2 while (n+1)**2-n*n<=168:
3     n+=1
4 
5 for i in range((n+1)**2):
6     if i**0.5==int(i**0.5) and (i+168)**0.5==int((i+168)**0.5):
7         print(i-100)

對比下,這里應該找到數的最大值,而我少了這一步,數學改補補了。對了求一個平方根可以用   x**0.5 == int (x**0.5)   ,腦子銹了。。。下面是個更燒腦的答案。。。

其他答案

分析:整數+100是一個完全平方數即大於0的數,所以這個數應該是大於-99,否則不會是完全平均數。

x+100 =n*n

x+100+168=m*m 

2x+268=n*n+m*m

2x=n*n+m*m-268

x=(n*n+m*m-268)*0.5

m*m-n*n=168,根據這條推斷,100*100-99*99=10000-9801=199>168,所以m和n的值都小於100,那么x的值就小於10000,所以

 1 import math
 2 
 3 
 4 #方法一
 5 for i in range(-99,10000):
 6     x = int(math.sqrt(i+100))
 7     if x*x == i+100:
 8         y = int(math.sqrt(i+100+168))
 9         if y*y==i+100+168:
10             print(i)
11             
12             
13 #方法二,再次優化,以m,n來寫代碼,n<100,又因為m*m=n*n+168,所以m>math.sqrt(168),即m>13,這個方法循環次數更少
14 for m in range(13,100):
15     n = int(math.sqrt(m*m-168))
16     if n*n ==m*m-168:
17         print(m*m-168-100)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM