→ Ricestone : 這暴力解是直接用畢氏三元數公式一個一個代? 10/03 00:09
Python原始程式如下:
B=1
for i in range(1,1000):
for j in range(1,1000):
a=abs(i**2-j**2)
b=2*i*j
if abs(3-a/b)<B:
B=abs(3-a/b)
print(a,b)
※ 編輯: kilva (114.42.44.90), 10/03/2018 00:12:02
※ 編輯: kilva (114.42.44.90), 10/03/2018 00:14:30
→ Ricestone : 看起來所謂的兩邊指的是兩股對吧? 10/03 00:16
是的。
※ 編輯: kilva (114.42.44.90), 10/03/2018 00:17:53
推 Vulpix : for j in range(1,i-1): 這樣後面的a=abs(...)可以 10/03 00:32
→ Vulpix : 少算abs,而且重複的組數也大為下降。 10/03 00:32
→ Vulpix : 然後是結論:其實你只要找√10-3的有理數逼近就好。 10/03 00:33
→ Vulpix : 任意比例(應該是有理數吧)c, 0.5(i/j - j/i)≒c 10/03 00:34
→ Vulpix : 所以你想找的i/j大概跟這樣的x差不多:x-1/x=2c。 10/03 00:35
→ Vulpix : x=√(1+c^2)-c,然後就是找個適合的數列逼近x。 10/03 00:38
→ Vulpix : 重新看看公式,其實我們在找斜邊和一股之間的差距。 10/03 00:47
推 Desperato : sqrt(10)-3的有理逼近會自動成為畢式三元組嗎 10/03 22:02
推 Desperato : 噢噢懂了 好方法 10/03 22:08
推 Sfly : 這可以用Pell eq. 10/03 23:14
推 Vulpix : 嗯,x_{n+1}=2c+1/x_n這樣的遞迴式就很好用了。 10/04 00:29
→ Vulpix : c=3,所以剛好是連分數,i,j的互質問題也更單純。 10/04 00:31
→ Vulpix : 還保證它們愈來愈大。 10/04 00:31