^a + b^5 = c^5となるa、b、cを探しています。私のプログラムは、2000^5 + 1 = 2000^5となる。なぜこれが起こっていて、それを修正するのですか?"largeNumber^5 + 1 = largeNumber^5"をJavaで修正する方法
public class Euler {
public static void main(String[] args) {
long i=0;
int power = 5;
int a1 = 1;
int a2 = 2000;
boolean isSolved = false;
long sumOfPowers = 0;
double root = 0;
long roundDown = 0;
long roundDown2Power = 0;
sumOfPowers = (long) (Math.pow(a1, power) + Math.pow(a2, power));
root = Math.pow(sumOfPowers, 1.0/power);
roundDown = (long) root;
roundDown2Power = (long)Math.pow(roundDown, power);
if (sumOfPowers == roundDown2Power) {
isSolved = true;
System.out.println(isSolved + " " + a1 + "^" + power + " + " + a2 + "^" + power + " + " + "^" + power + " = " + roundDown + "^" + power);
}
}
}
私はオイラーの予想の反例を探しています。私はこの方法を使用して5度で成功しました。これは6秒かかっています(Lander & Parkkin、1966)。私は5800^4 + 217519^4 + 414560^4 = 422481^4(Roger Frye、1988)を取得しようとしていますが、このモジュールをテストすると私のプログラムは2000^5 + 1 = 2000^5になります。それは問題です。
あなたはhttps://en.wikipedia.org/wiki/Fermat%27s_Last_Theoremを知っていますか? – luk2302
確かに、私は知っています。私はhttps://en.wikipedia.org/wiki/Euler%27s_sum_of_powers_conjectureに反例を見つけようとしており、n = 5で動作させていますが、丸め誤差のためにn = 4で動作させることはできません'20k^4 + 1 = 20k^4 'である。 – sixtytrees
プリミティブ型は、表現可能な値の範囲が限定されており、float/doubleの場合に値を表現できる精度も制限されています(n> 2^52以上の整数値の場合はn == n + 1 *真*になる)。たとえば、次のような任意の精度タイプを使用するように切り替える必要があります。 BigIntegerはこれらの制限を克服します(ただし、パフォーマンスに著しい落ち込みが予想されます)。 – Durandal