Quantcast
Channel: 円周率近似値の日に生まれて理系じゃないわけないだろ! - knifeのblog
Viewing all articles
Browse latest Browse all 5376

x=a⁴+b⁴+c⁴+d⁴の解の個数

$
0
0

また友より面白い問題を提示されましたので、プログラミングで解決していこうと思います。

問題
x=a4+b4+c4+d4, a≤b≤c≤d, a,b,c,d∈N
を満たし、解の組数をnとします。
nに対して最小となるxとn組の解を示せ。


n=1, x=4
(1,1,1,1)
n=2, x=259
(1,1,1,4)
(2,3,3,3)
n=3, x=16578
(1,2,9,10)
(2,5,6,11)
(3,7,8,10)


これをプログラミングで探しだしていくとする。

何も考えずに大外をxのループ、内側にa,b,c,dのそれぞれのループとかで考えると、n=8くらいまでは待っていられたが、これではダメだと考えるに至る。

まぁ、端からダメだとは感じていたんですけどねw。

例えばxが64ビット正整数の範囲を求めたとするならば、dは幾つまであればいいのだろうか。
x=18446744073709551615
x-3=18446744073709551612
[(x-3)1/4]=65535
14+14+14+655354=18445618199572250628

続いて、a,b,c,dが平均的だった場合を考えると、
[[x/4]1/4]=46343
463434+463434+463434+463434=18450008410435900804

計算してみたが、データが膨大になることがわかっただけである。
xが32ビット正整数型の範囲を求めたとするならば、
x=4294967295
[(x-3)1/4]=255
[[x/4]1/4]=181
このくらいが妥当だろうか。

z=256;
for (a=1; a<z; a++)
for (b=a; b<z; b++)
for (c=b; c<z; c++)
for (d=c; d<z; d++) {
 /* 処理 */
}

というネストをすると、処理は何回まわるのだろうか。
この回る回数がデータの量となる。

180352320ループします。
xの値は32ビットデータとするので、4バイト
721409280バイト
704501.25 KB
約688 MB

HDDにこんだけ空き容量が無ければダメだ。

さて、データを作ってみましょうかね。


ではでは


Viewing all articles
Browse latest Browse all 5376

Trending Articles