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