你怎么能有超过2.17b次的for循环迭代?

时间:2013-06-12 02:30:26

标签: java

考虑我的以下代码,找到数字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次?

2 个答案:

答案 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);