-2

我试图解决此代码,但实际上我不能..我没有任何结果...如果有人可以提供帮助,则此代码有效,但没有结果!:

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);
    }
}
4

2 回答 2

2

无需详细介绍高级筛算法:

  • 您只需要找到小于或等于 的除数sqrt(i)。(如果一个整数j>sqrt(i) 除以i,则存在另一个整数k<sqrt(i)也除以i。)
  • 您可以丢弃(即不检查)除 2 以外的偶数除数。(如果偶数除数,i2除数i,并且您之前已经测试过)
  • 您可以丢弃您知道不是素数的除数(即i您发现的素数的早期值)。如果一个整数j除以i,要么j是素数,要么是j=p*m(其中p是素数,p除以i)。
  • 内部循环是不必要的(您正在通过对商的蛮力搜索来替换除法)。相反,检查是否i%j==0(即i除以的余数j是否为零)。
于 2013-03-18T14:22:45.333 回答
0

这段代码正在循环n^3迭代(少一点)。难怪当你通过一个大的时候它不会走到最后n

你可以通过改变“让它工作”

n = 10000;

n = 1000;

那么结果是

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

简而言之,您的代码似乎工作正常,您只需要为 big 寻找更有效的算法n

于 2013-03-18T14:19:51.543 回答