看板 Math 關於我們 聯絡資訊
假設我們要找一個畢氏三元數,其兩邊的比例會趨近於3,則可以寫個暴力解 的程式,得出 12 5 35 12 609 200 936 310 1333 444 13328 4446 23091 7700 35520 11842 50615 16872 876885 292292 的數列。其中,每對數字均為畢氏三元數的兩邊,且其比例會趨近於3。 請問,除了用暴力解之外,有沒有更快的方法可以找到其比例趨近某值的兩邊 數值。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.44.90 ※ 文章網址: https://www.ptt.cc/bbs/Math/M.1538496108.A.B30.html
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