所以由于某种原因,这让我被0除以除法,有什么想法吗?
package euler;
public class LargePrimeFactor {
public static long max = 600851475143L;
public static int isPrime() {
int count = 0;
for(int i = 1; i < max; i++) {
if(max % i == 0)count += i;
}
return count;
}
public static void main(String[] args) {
System.out.println(max/isPrime());
}
}
答案 0 :(得分:0)
由于i
,overflow
的值将在Integer.MAX_VALUE
之后为Integer overflow
,您将收到此错误。您的max
是一种long
持有值600851475143L
(大于Integer.MAX_VALUE),但i
是整数。因此,在某个时间点,由于i
,0
最终将达到overflow
,并且max % i
= 600851475143L/0
将引发错误。为了解决该问题,我建议将i
类型设置为long。
long count = 0;
for(long i = 1; i < max; i++) {
if(max % i == 0)count += i;
}
答案 1 :(得分:0)
变量i
的类型为int
。 The maximum value of an int
is (2^31) - 1 = 2147483647
。当您将最大int
值加1时,它将溢出,成为最小int值(-2^31 = -2147483648
)。这称为ring arithmetic,继续向此变量添加1,最终它将变为0
,从而产生DivisionByZeroException
(记住,division and modulus are semantically coupled)。
顺便说一句:出于同样的原因,您可以看到i < max
将永远为真。