-1

考虑我下面的代码来查找数字 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 次?

4

2 回答 2

5

Java 将没有类型后缀的数字视为整数。因此,诸如 600851475143 之类的值在编译时会失败,因为它不能被识别为任何类型的整数。

您需要做的是更改它,使其如下所示:

for(long i = 2; i < 600851475143L; i++) {
    // code
}

L末尾的 告诉 Java 这是一个很长的文字。然后,您的循环将起作用。

于 2013-06-12T02:38:04.810 回答
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);
于 2013-06-12T02:39:13.270 回答