总和和三个循环的素数

时间:2013-03-18 14:17:02

标签: java

我试图解决这个代码,但实际上我不能...我没有任何结果...如果somembody可以帮助,这个代码工作,但没有结果! :

public class Primenumber {

    public static void main(String[] args) {
        int n = 10000;
        long sum = 0;
        loop:
        for (int i = 2; i <= n; i++) {
            for (int j = 2; j < n; j++) {
                for (int k = j; k < n; k++) {
                    if (i == j * k) {
                        continue loop;
                    }
                }
            }
            sum += i;
        }
        System.out.println("该整数之内的所有素数之和是:" + sum);
    }
}

2 个答案:

答案 0 :(得分:2)

不详细介绍先进的筛分算法:

  • 您只需要找到低于或等于sqrt(i)的除数。 (如果是整数j>sqrt(i)i之外,还存在另一个整数k<sqrt(i),它也会i分开。)
  • 你可以丢弃(即不检查)除2之外的除数。(如果偶数整数除i,则2i,你之前已经测试过了)
  • 你可以丢弃你知道不是素数的除数(即你发现的i的早期值是素数)。如果整数j除以i,则j为素数,或j=p*m(其中p为素数,p除以{{1} }})。
  • 内部循环是不必要的(您通过对商的强力搜索来替换除法)。相反,请检查i是否(i%j==0除以i的余数为零)。

答案 1 :(得分:0)

此代码循环约n^3次迭代(少一点)。难怪当你通过一个大的n时它不会结束。

您可以通过更改

“使其正常工作”
n = 10000;

n = 1000;

然后结果是

该整数之内的所有素数之和是:76127

简而言之,您的代码似乎运行正常,您只需要为大n寻找更有效的算法。