-3

誰かがこれについて私を助けることができるかどうか疑問に思っています。コードは機能していますが、メソッドを同じに保ちながら、このアルゴリズムから不要なコードを短縮/削除することは可能ですか? 必要のないものはすでにいくつか取り出しましたが、他に取り出せるものがあるかどうかはわかりません。

前もって感謝します!

public static void listPrimes(int maxNum) {
    for (int i = 2; i < maxNum; i++) {   
        boolean isprime = true;   

        for (int j = 2; j <= Math.sqrt(i); j++) {   
            if (i > 1 && j < i && i % j == 0) {   
                isprime = false;   
                break;   
            }
        }   

        if (isprime) {
            System.out.println(i); 
        } 
    } 
}
4

1 に答える 1

0

わかりました、これは短くするのではなく、スピードアップするためです。また、素数を見つけるためのより効率的な方法があることにも注意してください。

値を出力することは別として、Math.sqrt(i)おそらく最もコストのかかる操作です (数値が大きくなり始めるとすぐに、おそらく処理時間の割合がますます大きくなります)、ループの前に変数に入れることを検討することをお勧めします。

素数は 2 と奇数のみなので、2 をハードコーディングしてすべての偶数をスキップできます。

i > 1 && j < iすでに述べたように無意味です。

SHORTEN -isPrimeチェックするだけで置き換えjます。

public static void listPrimes(int maxNum) {
    System.out.println(2);
    for (int i = 3; i < maxNum; i += 2) {   
        int sqrtI = (int)Math.sqrt(i);
        int j;
        for (j = 2; j <= sqrtI; j++)
            if (i % j == 0)
                break;   

        if (j == sqrtI + 1)
            System.out.println(i); 
    } 
}
于 2013-04-05T07:03:23.510 に答える