2

この Java プログラムで 10001 個の素数をストリーミングしたいのですが、不可解にも 16 を素数としてラベル付けすることにしました。

ここでのアルゴリズムは、素数の実行中のカウントを保持し、新しい数をそれぞれチェックして、それよりも小さい素数で割り切れるかどうかを確認します。primes[ ]そうでない場合は、配列 primes[ ] に追加され、数値がコンソールに表示され、いっぱいになるまでプロセスが続行されます。

public static void main(String[] args){
    int[] primes = new int[10001];
    int primeCount = 1;
    int testNumber = 3;
    primes[0] = 2;
    while(primeCount < 10001){
        for (int i = 0; i < primeCount; i++){
            if (testNumber % primes[i] == 0){
                i = 0;
                testNumber++;
            }
        }
        primes[primeCount] = testNumber;
        System.out.println(testNumber);
        primeCount++;
        testNumber++;

    }
}

コンソールの読み出し:

   
3
5
7
11
13
16
17
19
.
.
.

16を除いて、他のすべては順調に見えます... 何かアイデアはありますか?

4

3 に答える 3

6

ゼロに設定した直後に の値を増やしているため、i = -1代わりに設定する必要があります。i = 0i

forループがどのように機能するかを頭に入れておくことをお勧めします。

于 2013-02-24T21:18:52.550 に答える
4

ソフトウェアプログラミングの観点からは、whileループ内でforループを使用しないでください。素数ではないことがわかるか、すべての可能性をチェックして、それが素数であると見なすまでループする必要があります。除算器が見つかりませんでした。したがって、大きいwhileの中にwhileループが必要です。つまり:

public static void main(String[] args) {
    int[] primes = new int[10001];
    int primeCount = 1;
    int testNumber = 3;
    primes[0] = 2;
    while (primeCount < 10001) {
        boolean isPrime = true;
        int i = 0;
        while (isPrime && i < primeCount) {
            if (testNumber % primes[i] == 0) {
                i = 0;
                testNumber++;
                isPrime = false;
            } else {
                i++;
            }
        }
        if (isPrime) {
            primes[primeCount] = testNumber;
            System.out.println(testNumber);
            primeCount++;
            testNumber++;
        }

    }
}
于 2013-02-24T21:31:27.537 に答える
0

これがあなたのプログラムの修正版です

public static void main(String [] args){

        int[] primes = new int[10001];
        int primeCount = 1;
        int testNumber = 3;
        primes[0] = 2;
        while(primeCount < 10001){
            for (int i = 0; i < primeCount; i++){

                if (testNumber % primes[i] == 0){
                    i = -1;
                    testNumber++;
                }
            }
            primes[primeCount] = testNumber;
            System.out.println(testNumber);
            primeCount++;
            testNumber++;

        }
    }
于 2013-02-24T21:27:47.163 に答える