-2

I tried to solve this code but really I cant .. I don't have any result of it ... if somembody can help , this code works but without result !! :

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 以外の約数を破棄する (つまり、チェックしない) ことができます (偶数の整数が を割りi、次に を2割りiます。これは既にテスト済みです)。
  • 素数ではないことがわかっている除数 (素数であることがわかっている以前の値) を破棄できますi。整数が をj割る場合、は素数、または(は素数で、 は を割ります)iのいずれかです。jj=p*mppi
  • 内側のループは不要です (除算を商のブルート フォース検索で置き換えています)。代わりに、かどうかi%j==0(つまり、i除算の剰余jがゼロかどうか) をチェックします。
于 2013-03-18T14:22:45.333 に答える
0

This code is looping on about n^3 iterations (a little less). No wonder it doesn't go to the end when you pass a big n.

You can "make it work" by changing

n = 10000;

to

n = 1000;

then the result is

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

In short your code seems to work fine, you just have to look for a more efficient algorithm for big n.

于 2013-03-18T14:19:51.543 に答える