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