【问题标题】:to find sum of primes up to 2 million [duplicate]找到最多200万的素数之和[重复]
【发布时间】:2016-08-26 12:11:36
【问题描述】:

我试图找到所有素数的总和

             "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

    }

}

如何在代码中解决这个问题?

【问题讨论】:

  • 你的内循环不应该是for(int j = i; ...吗?

标签: java arrays primes


【解决方案1】:

给你:

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

现在它的范围从 0 到 2000000

【讨论】:

  • 成功了,我之前做错了
  • 既然我们已经知道 2000000 不是素数,另一个更好的解决方案是使用 &lt; 2000000 而不是 &lt;= 2000000
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 2013-05-15
  • 2020-11-12
相关资源
最近更新 更多