This question already has answers here:
What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?
                                
                                    (25个答案)
                                
                        
                                3年前关闭。
            
                    
我试图找到所有小于等于2百万的素数之和,所以我使用Eratosthenes筛子来标记所有素数。当我声明大小为200万的布尔数组时,出现此错误

             "main" java.lang.ArrayIndexOutOfBoundsException: 2000000


由于总和可以是两个大,所以我用了long而不是sum。这是java中的代码

public class Summationofprimes {
    static  long[] isprime=new long[2000000];

     static void sieve(){
         Arrays.fill(isprime, 0);//all marked false
         isprime[1]=1;isprime[0]=1;
         for(int i=2;i*i<=2000000;i++){
             if(isprime[i]==0){
                // print(i);
                // sum+=i;
                //print(sum);
                 for(int j = i * i; j <= 2000000 ;j += i){
                     isprime[j]=1;// all multiples marked true
                 }
             }
         }


    }

    public static void main(String[] args) {
        sieve();
        long sum=0;
        System.out.println("sum is :");
        for(int i=2;i<=2000000;i++){
            if(isprime[i]==0){
                sum+=i;


        }
        }
        System.out.println(sum);
        // TODO Auto-generated method stub

    }

}


如何在代码中解决此问题?

最佳答案

干得好 :

static  long[] isprime=new long[2000001];


现在范围从0到2000000

09-10 01:28