这得到了数字的所有素数,但它继续前进,然后出于某种原因输出数字的负数,有帮助吗?链接到这里的问题:http://projecteuler.net/problem=3

public static void main(String[] args) {
    long number = 600851475143l;

    divChecker(number);
}

public static void divChecker(long n) {
    int div = 2;
    while (div * div < n) {
        if (n % div == 0) {
            primeChecker(div);
            div++;
        } else {
            div++;
        }
    }
}

public static void primeChecker(long n) {
    int div = 2;
    while (div * div < n) {
        if (n % div != 0) {
            div++;
        } else {
            break;
        }
    }
    if (n % div != 0) {
        System.out.println(n);
    }
}


在这里输出:

71
839
1471
6857
-716151937
-408464633
-87625999
-10086647
-5753023
-1234169
-486847
-104441
-59569
-6857
-1471
-839
-71
-1
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Bucky.divChecker(Bucky.java:13)
    at Bucky.main(Bucky.java:7)

最佳答案

您与int的乘法最终会溢出,产生“负”因子。

将您的div变量声明为long而不是int

long div = 2;  // Two places in the code


进行此更改后,我仅获得此输出,并且Windows计算器会验证其产品是您要乘以600851475143L的原始数字:

71
839
1471
6857

关于java - 项目Euler 3 Java ArithmeticException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24393670/

10-14 11:48