考虑我的以下代码,找到数字600851475143的最大素数:
public class Three {
public static void main(String[] args) {
int counter = 0, largePrime = 0;
for (int i = 2; i <= 600851475143; i++){
for(int x = 2; x < = i; x++){
if(i %x == 0){
counter++;
}
}
if (counter == 1){
// System.out.println(i);
largePrime=i;
}
counter=0;
}
System.out.println(largePrime);
}
}
Java无法运行,因为它超出了int限制。我也试过long,double和BigInteger,但无济于事。有没有办法让for循环迭代次数超过2.17b次?
答案 0 :(得分:5)
Java对待a number without a type suffix as an integer。因此,诸如600851475143之类的值在编译时失败,因为它无法被识别为任何整数。
您需要做的就是更改它,使其如下所示:
for(long i = 2; i < 600851475143L; i++) {
// code
}
最后的L
告诉Java这是一个很长的文字。然后,你的循环将起作用。
答案 1 :(得分:1)
以下尝试
long counter = 0,largePrime= 0;
Long max=new Long("600851475143");
for ( long i=2;i<=max.longValue();i++){
for(int x=2;x<=i;x++){
if(i %x==0){
counter++;
}
}
if (counter == 1){
// System.out.println(i);
largePrime=i;
}
counter=0;
}
System.out.println(largePrime);