找出所有素数低于200万的总和.我的程序不适用于非常大的数字

Nol*_*oli 5 java algorithm primes

这是我找到素数之和的代码.它对一些低数字很好但是如果它2000000(200万)它永远不会结束.任何人都可以帮助我吗?

import java.math.BigInteger;
public class Problem010{
    public static void main(String[] args) {

        BigInteger sum = new BigInteger("2");

        //for (int i=3; i<2000000; i++) {
        for(int i=3; i<10; i++){
            for (int j=2; j<i; j++){
                if (i % j == 0) 
                    break;
                else if (i == j+1){
                    sum = sum.add(BigInteger.valueOf(i));
                }
            }
        }
        System.out.println("Sum  = "+sum); 
    }
}
Run Code Online (Sandbox Code Playgroud)

Lrr*_*rrr 9

你的答案是142913828922怎么回事?

我刚刚改变了你的算法:

public static void main(String[] args) {

    BigInteger sum = new BigInteger("2");
    boolean isPrime = true;
    for (int i=3; i<2000000; i++) {
    double aa = Math.sqrt((double)i);
        for (int j=2; j<=aa; j++){
            if (i % j == 0){ 
                isPrime = false;
                break;
            }
        }
        if(isPrime){
            sum = sum.add(BigInteger.valueOf(i));
        }
        isPrime = true;
    }
    System.out.println("Sum  = "+sum); 
}
Run Code Online (Sandbox Code Playgroud)

而不是通过从2到i的所有数字,我只是从2到sqrt(i),这大大改善你的代码运行时间:)