java - 项目 Euler 3 Java ArithmeticException

标签 java

这得到了数字的所有素因数,但它继续下去,然后由于某种原因输出了数字的负因数,有帮助吗?问题链接如下: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/

相关文章:

java - 如何将 ListView 滚动到 Android 上的特定位置?

java - 如何使用 mysql 和 JDBC 创建内连接

java - 如何使用从中获取 inputStream 的临时文件

java - "Your security settings have blocked a self-signed application from running"带有真正的 pfx 签名 jar

java - Spring MVC 数据绑定(bind)

java - 如何指定一次使用哪个模式?

java - 将对象添加到 "? extends"类型的通用集合

java - 有没有办法检查正则表达式是否代表 url

Java指针异常

java - apache mina sshd 验证客户端签名