我试图重复寻找有关欧拉猜想的反例。我需要找到五个数字,例如a1^5+a2^5+3^5+a4^5 =a5^5。最小的反例是27 ^ 5 + 84 ^ 5 + 110 ^ 5 + 133 ^ 5 = 144 ^ 5。我认为我正在遍历每个数字,并确保数字是有序的,但是,我没有得到预期的结果。请指出我的错误。

public class Euler {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int a1 = 1; //greatest
        int a2 = 1;
        int a3 = 1;
        int a4 = 1;
        boolean solved = false;
        while (!solved) {
            if (a3 >= a4) { //major progress!!!
                System.out.println("values are " + a1 + " " + a2 + " " + a3 + " " + a4 + " " + solved);
                a4++;
                a3 = 1;
                a2 = 1;
                a1 = 1;
            }else if(a2 >= a3) {
                a3++;
                a2 = 1;
                a1 = 1;
            } else if(a1 >= a2) {
                a2++;
                a1 = 1;
            }
            solved = antiEuler(a1, a2, a3, a4);//Check conjencture
            a1++;
        }
    }
    public static boolean antiEuler(int a1, int a2, int a3, int a4) {//

        double a5 = Math.pow(Math.sqrt(Math.pow(a1, 5) + Math.pow(a2, 5) + Math.pow(a3, 5) + Math.pow(a4, 5)), 0.2);
        double a6 = Math.floor(a5);
        if (a6 == a5) {
                        System.out.println("Done!");
            System.out.println(a1+" "+a2+" "+a3 +" "+a4+" "+a5);


            return true;
        } else {
            return false;
        }
    }
}

最佳答案

该程序存在几个问题。


首先,最小的示例包含大于6 * 1010的1445,因此int将不起作用。你应该用久
其次,您应该比较整数,而不是它们的根,以免遇到差错。该程序找到第一个示例。

public class Euler {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    long a1 = 1; //smallest
    long a2 = 1;
    long a3 = 1;
    long a4 = 1;  //greatest
    boolean isSolved = false;
    double a6 = 0;
    double a7 = 0;
    long a8 = 0;
    double a9 = 0;
    while (!isSolved) {
        a1++;
        if (a1 > a2) {
            a2++;
            a1 = 1;
        }
        if (a2 > a3) {
            a3++;
            a2 = 1;
            a1 = 1;
        }
        if (a3 > a4) {
            //System.out.println(a4 + " " + isSolved);
            a4++;
            a3 = 1;
            a2 = 1;
            a1 = 1;
        }
        a6 = Math.pow(a1, 5) + Math.pow(a2, 5) + Math.pow(a3, 5) + Math.pow(a4, 5);
        a7 = Math.pow(a6, 0.2);

        a8 = (long) a7;
        a9 = Math.pow(a8, 5);

        if (a6 == a9) {
            isSolved = true;
            System.out.println(a1 + " " + a2 + " " + a3 + " " + a4 + " " + a8);
        }
    }
}
}

09-05 21:12