a<b
については
とc=b+k
1はa
ための有効な選択肢であることを教えてくれる
a^17 = (b+k)^17-b^17 = 17*k*b^16 + 8*17*k^2*b^15 + ...
を取得し、どのように改善する可能性があるため、フロート の低精度の悪いです(17*k/b)^(1/17)*b
の周りにあり、これは感覚的な選択肢を減少させるa
を17倍減少させる。したがって、ループを
minerr = 1.0
amin = 100; bmin = 100;
for b in range(100, 1000+1):
for c in range(b+1, 2*b):
a = int(round((c**17-b**17)**(1.0/17))
if a > b: break;
relerr = abs((1-(a**17+b**17)/float(c**17))
if relerr < minerr:
print a,b,c,relerr
amin=a; bmin=b; minerr=relerr
かなり速く実行され、出力
91 100 101 0.014295850232
95 100 102 0.0127684524838
91 101 102 0.0104995591939
92 102 103 0.00622204374651
93 103 104 0.00197150095955
100 106 108 0.00195817126477
107 108 112 0.00104974944998
99 110 111 0.000393678252529
139 158 159 3.78426050378e-05
166 168 174 3.0425791517e-05
186 190 196 1.5711666417e-05
298 312 319 3.40065617555e-06
318 323 334 1.40781743518e-06
389 452 454 1.40251765757e-06
543 628 631 6.18935889096e-07
594 691 694 2.35972024587e-07
815 993 995 5.41414728605e-08
私はPythonのコードを推測するつもりだ、とそれはあなたがここに質問をする前に自分自身を思い付くする必要がありますPythonのコードですがあります。間違っていても間違っていても問題を解決しようとするどんな試みも、何もないよりも優れています。 – tadman
あなたのためにいくつかのコードを書きたいと思うようです。多くのユーザーは、苦痛を伴うコーダーのコードを作成したいと考えていますが、通常、ポスターがすでに自分で問題を解決しようとしたときにのみ役立ちます。この努力を示す良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、予想される出力、実際に得られる出力(コンソール出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性のある回答が増えます。 [FAQ](http://stackoverflow.com/tour)と[How to Ask](http://stackoverflow.com/help/how-to-ask)を参照してください。 –
SOはコード作成サービスではありませんので、まず自分のコードを試してください。コードに問題が発生した場合は、質問してください。 –