This question already has answers here:
What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?
(25个答案)
3年前关闭。
我试图找到所有小于等于2百万的素数之和,所以我使用Eratosthenes筛子来标记所有素数。当我声明大小为200万的布尔数组时,出现此错误
由于总和可以是两个大,所以我用了long而不是sum。这是java中的代码
如何在代码中解决此问题?
现在范围从0到2000000
(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