使用筛子的素数最高达10 ^ 8

问题描述 投票:0回答:1

为什么此代码仅工作小于10 ^ 4的数字?我需要找到所有小于10 ^ 8的质数,但这显示arrayindexoutofbound异常?为什么?我知道我们只能创建数组,直到size10 ^ 8(如果我错了,请纠正我),但这甚至不能用于10 ^ 5。

 class Prime
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            boolean[] prime = new boolean[10000];
            prime[2]=true;
            int i;
            for(i=3; i<100000; i+=2)
                prime[i]=true;
            for(i=3; i<10000; i++)  
            {
                if(prime[i]==true)
                for(int j=i*i; j<10000; j=j+i)
                    prime[j]=false;
            }
            for(i=1; i<10000; i++)
            {
                if(prime[i]==true)
                System.out.println(i);
            }
        }
    }
java arrays primes sieve-of-eratosthenes
1个回答
0
投票
for(int j=i*i; j<10000; j=j+i)

如果i为10 ^ 5,则j为10 ^ 10,这将导致int类型溢出(int类型的最大值为2 ^ 31-1 = 2147483647)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.