^5 + 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);
}
}
}
나는 오일러의 추측의 반례를 찾고 있어요. 나는이 방법을 사용하여 다섯 번째 힘을 얻었으며, 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에 counterexample을 찾으려고 노력 중입니다. n = 5에서 작동하지만, 반올림 오류로 인해 n = 4에서 작동하지 않습니다. '20k^4 + 1 = 20k^4'. – sixtytrees
프리미티브 유형은 표현할 수있는 값 범위가 제한되어 있으며 float/double의 경우 값을 표현할 수있는 정확도도 제한됩니다 (n> 2^52 이상의 정수 값의 경우 n == n + 1 * true *가됩니다). 예를 들어 다음과 같은 임의의 정밀도 유형을 사용하도록 전환해야합니다. 이러한 한계를 극복하기위한 BigInteger (성능이 크게 저하 될 것으로 예상). – Durandal