また友より面白い問題を提示されましたので、プログラミングで解決していこうと思います。
問題
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にこんだけ空き容量が無ければダメだ。
さて、データを作ってみましょうかね。
ではでは
↧
x=a⁴+b⁴+c⁴+d⁴の解の個数
↧