1

このコードで、素数でない場合は因数を出力し、素数の場合は素数として識別できるようにしたいと考えています。

#include <stdio.h>

main() {
int possible_prime, n, possible_divisor;

printf( "\tThis program lists all primes <= n\n\n" );
printf( "Input n: " );
scanf( "%d", &n );
printf( "\n\n\tPrimes <= %d: \n\n", n );

    for ( possible_prime = 1; possible_prime <= n; possible_prime++ ) {
          /* try to find a divisor of possible_prime */

         for ( possible_divisor = 1; possible_divisor < possible_prime; possible_divisor++ ) {
             if ( possible_prime % possible_divisor == 0 )
                printf("\n\t%d", possible_prime);
               }

          /* found a divisor so possible_prime is not prime */
          break;

    if ( possible_divisor == possible_prime )
         /* exhausted possible divisors, so possible_prime is prime */
         printf( "%d\n", possible_prime );

   }
}

if ステートメントの下に printf がなくても問題なく動作します。これを追加すると、プログラムは「素数 <= n」のみを出力し、他には何も出力しません。printf がループを台無しにする理由がわかりません。

4

2 に答える 2

6

あなたのbreak発言は間違った場所にあります。内側のforループの中に入れます。for現在、 1が素数かどうかを確認した後、外側のループから抜け出しています。

内部printステートメントを追加した後にのみこれが発生する理由については、その過程でいくつかの中括弧を移動したと思います。

これを修正した後、あなたのプログラムは何も素数ではないことをあなたに伝えていることにおそらく気付くでしょう。プログラムの素数性の条件を再確認することをお勧めします。

于 2013-08-04T14:19:35.720 に答える
1

あなたのプログラムは、素数も非素数の因数も出力しません。コードの修正版は次のとおりです。

#include <stdio.h>

int main() 
{
    int possible_prime, n, possible_divisor;

    printf( "\tThis program lists all primes <= n\n\n" );
    printf( "\tInput n: " );
    scanf( "%d", &n );
    printf( "\n\n\tPrimes <= %d: \n\n", n );
    printf("Prime num\tNon-prime\n");
    printf("2\n");
    for ( possible_prime = 3; possible_prime <= n; possible_prime++ ) 
    {
            /* try to find a divisor of possible_prime */

            for ( possible_divisor = 2; possible_divisor < possible_prime; possible_divisor++) 
            {
                 if ( possible_prime % possible_divisor == 0 )
                 {
                     printf("\t\t%d:", possible_prime);
                     for (i = 1; i <= possible_prime; i++)
                     {
                         if(possible_prime % i == 0)
                            printf("%d ", i);
                     }
                 printf("\n");  
                 break;
                 }
            }

      /* found a divisor so possible_prime is not prime */


          if ( possible_divisor == possible_prime )
          /* exhausted possible divisors, so possible_prime is prime */
               printf( "%d\n", possible_prime );

    }
}
于 2013-08-04T14:56:31.543 に答える