Java中的Euler第10个解决方案

Java中的Euler第10个解决方案,java,Java,我试图解决这个问题并编写代码,但没有成功。我试过使用断点,它似乎在工作,但它不。。我哪里出错了 第十个欧拉问题: 低于10的素数之和为2+3+5+7=17。 求200万以下所有素数之和 我的java代码: 公共类问题\u 010{ 公共静态void main(字符串[]args){ 长和=0; 布尔控制=假; 对于(int i=3;i

我试图解决这个问题并编写代码,但没有成功。我试过使用断点,它似乎在工作,但它不。。我哪里出错了

第十个欧拉问题: 低于10的素数之和为2+3+5+7=17。 求200万以下所有素数之和

我的java代码:

公共类问题\u 010{
公共静态void main(字符串[]args){
长和=0;
布尔控制=假;
对于(int i=3;i<2000000;i+=2){
控制=真;
对于(int j=2;j
您的代码将正常工作,这将花费很长时间。为了找到素数,你可以采取更好的方法;请看1,这是一种常用的算法,用于查找小于某个整数的素数



1 Atkin筛是一种优化版。正如@DennisMeng所指出的那样,后者应该足够快,并且可能更容易编码。

如果运行足够长的时间,答案是正确的,只是效率非常低。试试这个

public static void main(String... ignored) {
    long sum = 2;
    for (int i = 3; i < 2000000; i += 2) {
        if (isPrime(i))
            sum += i;
    }

    System.out.println("Sum: " + sum );
}

private static boolean isPrime(int i) {
    for (int j = 3; j * j <= i; j += 2) {
        if (i % j == 0)
            return false;
    }
    return true;
}
publicstaticvoidmain(字符串…忽略){
长和=2;
对于(int i=3;i<2000000;i+=2){
如果(i)
总和+=i;
}
System.out.println(“总和:+Sum”);
}
私有静态布尔iPrime(int i){

对于(int j=3;j*j你所说的“工作不正常”是什么意思?你会得到任何错误或错误的输出?把问题弄清楚你会很快发现人们不会喜欢含糊不清的“这根本不工作,帮我弄清楚!”questions.int sum=2.您遗漏了2.此外,作为一种改进,您不需要检查到i的所有数字。检查到sqrt(i)已经足够了。我没有得到任何错误或输出,只是我想了解这一点,为什么?我优化了我的代码,现在它工作得更快。‘埃拉托斯提尼筛’不是更快吗?@radimpe Sieve of Atkin是一个优化版本。虽然埃拉托斯提尼筛更容易编码,而且速度也足够快。因为这个问题即将得到prime num伯斯,我会坚持用埃拉托斯提尼筛。@DennisMeng你说得对,我在信中补充道。