# 【Python3練習題 003】一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?


# -------------------------------------------------
#
# 所謂的“完全平方數”,就是開完根號仍然是整數。
#
# 數學渣是這么思考的:假設這個數 i 在10000以內。
# 第一步:x = sqrt(i+100)。如果 x == floor(x),則證明 x 是個整數。
# 第二步道理也相同,但要記得把 x**2 把根號還原回來,再加上 168,然后再來開根號,得到 y,再判斷其是否為整數。
# 經過這兩次判斷,都能通過的話,則為所求的整數。
import math

for i in range(10000):
x = math.sqrt(i + 100)
if x == math.floor(x):
y = math.sqrt(x**2 + 168)
if y == math.floor(y):
print(i)
break
# 方法二 神算法來了!!感謝 codegay 的指教!先列出代碼,大家隨意感受一下:

[print(x**2-100, end = ',') for x in range(1000) for y in range(1000) if (y**2 - x**2 == 168)]

# 方法三 這個“列表推導式”很簡潔很帥氣有沒有!展開寫的話,就是:

for x in range(1000):
for y in range(1000):
if (y**2 - x**2) == 168:
print(x**2-100, end = ',')

# 這是格式上的不同,不奇妙,真正奇妙的是算法啊算法!!它巧妙地將第1個完全平方數標識為 x**2,
# 第2個標識為 y**2,如此就能用 if (y**2 - x**2) == 168 進行判斷,不得不說真是太聰明了!(還是說我太笨了?)輸出結果:
#
# -99,21,261,1581
#
# 唯一遺憾的是,x 和 y 的取值范圍完全不知道如何設定。隨手取了個 range(1000),但就算是取 10000,結果也就只有這 4 個。
# 我想,通過推導應該能證明最大值吧,但我就一數學渣,所以就算了…… PS:別輕易用 10000 這么大的值,要循環挺久的。
#
#
#
# ++++++++++++++++++++++++++++++++++++++++++++++


免責聲明!

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



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