返信が遅くなり申し訳ありません。
>ぽん太さん
なるほど。
具体値で追跡して概ね理解できました。
途中で n が奇数になったときにそれまでの x を value に乗算するところがうまく理解できていませんが;
これに関してですが、「xが非0整数」と書かれていますが、x=0 だと理想値は得られないのでしょうか…。
>boxさん
「 n>=3 のとき、x^n + y^n = z^n を満たす自然数の組 x, y, z は存在しない」というフェルマーの最終定理に関して、
2以上の自然数 z が与えられたとき、
x^n + y^n < z^n を満たす x^n + y^n が最大となるとき、『 z^n - (x^n + y^n) 』を求める。
といった内容です。
プログラムを書く上で、さらに条件として n=3, (1<)z<1000 を加えます。
実際はファイル入力ですが、以下のソースではfor文で z を回したものを示します。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void){
const int n=3;
int x, y, z, t;
int zn, xy, max;
for(z=900; z<=999; z++){
[color=tea[/url]/* z^n を zn に代入 */[/color]
zn = (int)pow(z, n);
[color=tea[/url]/* (x^3)+(x^3) < z となる最大のxを t に代入 */[/color]
t = (int)pow(zn/2, 1.0/n);
[color=tea[/url]/* x と y に t をに代入 */[/color]
x = y = t;
[color=tea[/url]/* (x^3)+(y^3) を max に代入 */[/color]
max = 2 * (int)pow(t, n);
[color=tea[/url]/* x を z-1 から t+1 まで */[/color]
for(x=z-1; x>t; x--){
[color=tea[/url]/* y を t から デクリメント */[/color]
[color=tea[/url]/* (x^3)+(y^3) が zn 以下になったら抜ける */[/color]
for(y=t; (xy=(int)(pow(x, n)+pow(y, n)))>zn; y--);
[color=tea[/url]/* 最新の (x^3)+(y^3) が 今までの max より大きかったら max を更新*/[/color]
if(max < xy) max = xy;
}
printf("%d\n", zn-max);
}
return(0);
}
テストデータが1000近くの場合に、x, y のループが多くなるせいで処理に時間がかかっているのですね…;
と書いたのですが、冗長な処理を見つけました。
[color=tea[/url]/* x を z-1 から t+1 まで */[/color]
for(x=z-1; x>t; x--){
[color=tea[/url]/* y を t から デクリメント */[/color]
[color=tea[/url]/* (x^3)+(y^3) が zn 以下になったら抜ける */[/color]
for(y=t; (xy=(int)(pow(x, n)+pow(y, n)))>zn; y--);
[color=tea[/url]/* 最新の (x^3)+(y^3) が 今までの max より大きかったら max を更新*/[/color]
if(max < xy) max = xy;
}
y のループの中では不変の x が引数のpow関数を動かしていました…。
[color=tea[/url]/* x を z-1 から t+1 まで */[/color]
for(x=z-1; x>t; x--){
xn = (int)pow(x, n);
[color=tea[/url]/* y を t から デクリメント */[/color]
[color=tea[/url]/* (x^3)+(y^3) が zn 以下になったら抜ける */[/color]
for(y=t; (xy=(int)(xn+pow(y, n)))>zn; y--);
[color=tea[/url]/* 最新の (x^3)+(y^3) が 今までの max より大きかったら max を更新*/[/color]
if(max < xy) max = xy;
}
と変更したら随分速くなりました…。
自己解決してしまいましたが、boxさんの回答がなければ気付くまで検証しなかったかもしれません;
回答ありがとうございました。
誠に勝手ではございますが、もしこのプログラムに関して改善可能な点が見受けられるようでしたらご指摘お願いします。
※ font 要素を pre 要素の内容とすることはできませんが、可読性を考慮して文法無視で色を変えています…。