java - 求 200 万以内的素数之和

标签 java arrays primes

我试图找到所有素数的总和<=200万,所以我使用埃拉托斯特尼筛来标记所有素数。当我声明大小为200万的 boolean 数组时,我得到了这个错误

             "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

关于java - 求 200 万以内的素数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39166037/

相关文章:

java - 循环遍历 "Color"枚举并打印值。不同的做法

java - BufferStrategy 滞后

c++ - 扁平化为 1D 数组的 2D 和 3D 数组的等效迭代?

python - 获取任意长度的所有可能的 str 分区

c - 这个 isPrime 函数是如何工作的?

python - 为什么我对 project euler 3 的回答不起作用?

java - Docker/Marathon 上的 Spring Boot 数组环境变量

java - 为什么.class文件的常量池表中没有列出一维数组类型?

c# - 素数c#

java - 如何将json转换为不换行的字符串和其他格式