-3

これが適切な場所かどうかはわかりませんが、私はかなり前から自分で解決策を探していたので、適切な場所に来たことを願っています。

素数を計算するとき、各数を割り切れる必要がある開始数は、非素数であるために2です。私のJavaプログラムでは、0から特定の数までの範囲のすべての非素数を含めたいのですが、0と1を含めるにはどうすればよいですか?素数ではないことを示す0と1のifステートメントとelse-ifステートメントを別々にする必要がありますか?たぶん0と1をjavaforループに含めるべきだと思いますが、それを行う方法がわかりません。

for (int i = 2; i < num; i++){
        if (num % i == 0){
            System.out.println(i + " is not a prime number. ");
        }
        else{
             System.out.println(i + " is a prime number. ");
        }

}
4

5 に答える 5

2

プログラムが正しくありません。num=91の場合。次に、このプログラムは91が素数であると5回(2から6)印刷し、次に素数ではないと印刷します。

boolean prime =true.
for (int i = 2; i <= Math.sqrt(num); i++){// less than equal to sqrt num is good enough.
        if (num % i == 0){
            prime=false;
            break; // no more checks needed
   }    
}
if (prime && (num>1)){ // to cover case of num=0 and num=1
     System.out.println(i+" is Prime");
}
else{
     System.out.println(i+" is NOT Prime");
}

はい、1と0を別々のケースとして含める必要があると思います。ただし、1と0は素数でも合成でもないことに注意してください。したがって、それを十分に考慮してください。

于 2012-12-13T05:06:29.347 に答える
1

nPrimenoを印刷するための完璧な出力

double i,j;


    for ( i = 2; i <= num; i++){
        boolean prime =true;
        for(j= 2; j<= Math.sqrt(i); j++)
        {// less than equal to sqrt num is good enough.
            if (i % j == 0){

                prime=false;
                break; // no more checks needed
       }    

        }
            if (prime && (i>1)){ // to cover case of num=0 and num=1
                 System.out.println(i+" is Prime");

            }
            else{
                 System.out.println(i+" is NOT Prime");
    }

    }
于 2012-12-13T08:35:48.863 に答える
0

ウィキペディアから:

素数(または素数)は、1より大きい自然数であり、1とそれ自体以外に正の約数はありません。

また、までチェックするのではなくnumsqrt(num)

for (int i = 0; i <= (int)Math.sqrt(num); i++){// i=sqrt(num) has to be checked
于 2012-12-13T05:08:24.250 に答える
0

あなたの基本的なアルゴリズムに固執するために、私はそれをこのようにします:

boolean maybePrime = num > 1;
int limit = (int) Math.sqrt(num);
for (int i = 2; maybePrime && i < limit; ++i) {
    maybePrime = num % i != 0;
}
if (maybePrime) {
    System.out.println(num+" is a prime number");
} else {
    System.out.println(num+" is not a prime number");
}

ただし、これはあまり効率的ではありません。エラトステネスのふるいの使用を検討することをお勧めします。

于 2012-12-13T05:11:29.763 に答える
0

あなたはそれらが常に何であるかを知っているので、私はそれらをあなたの通常の流れに適合させようとせずに直接それらを扱います。

ループにそれらが本当に必要な場合は、次のようにすることができます。

for (int i = 0; i < num; i++){
    if (i > 1 && num % i == 0){
        System.out.println(i + " is not a prime number. ");
    }
    else{
         System.out.println(i + " is a prime number. ");
    }
}

ゼロから始めて、ループに入っているように1を超えているかどうかのチェックを追加します。

于 2012-12-13T05:05:17.707 に答える