0

このコードは C ではどのようになりますか? 私はjavascriptでやってみましたが、ループする方法がわかりませんでした。ユーザーが入力した数値が素数かどうかを判別するプログラム。ユーザーが 2 未満の値を入力するまで、プログラムは数字の入力を求め続けます。このプログラムは、モジュールを使用して実装する必要があります。例 :

Enter a number: 4
4 is not a prime number 
Enter a number: 5
5 is a prime number 
Enter a number: 0

int main()
{
   int n, i = 3, count, c;

   printf("Enter the number of prime numbers required\n");
   scanf("%d",&n);

   if ( n >= 1 )
   {
      printf("First %d prime numbers are :\n",n);
      printf("2\n");
   }

   for ( count = 2 ; count <= n ;  )
   {
      for ( c = 2 ; c <= i - 1 ; c++ )
      {
         if ( i%c == 0 )
            break;
      }
      if ( c == i )
      {
         printf("%d\n",i);
         count++;
      }
      i++;
   }

   return 0;
}
4

2 に答える 2

1

これは、最適化されていない一般的なアルゴリズムです。

int n;
do
{
    printf("Enter the number: ");
    scanf("%d",&n);

    if (n >= 2) // check if number is prime, general algorithm
    {
        bool prime = true;
        for (int j=2; j<n; j++)
            if ( (n%j) == 0) // n is divided by j without modulus - is it not prime
            {
                prime = false;
                break;
            }

        if (prime)
            printf("prime\n");
        else
            printf("is not prime\n");
    }
} while (n >= 2);

これは更新されたバージョンで、偶数はすべて素数ではないという事実を使用しており、N/2 より大きい数をチェックする意味はありません。

int n;
do
{
    printf("Enter the number: ");
    scanf("%d",&n);

    if (n >= 2) // check if number is prime, general algorithm
    {
        bool prime = true; // for n=2 prime is true
        if (n > 2)
            prime = n & 1; // number at least odd

        if (prime)
        {
            // starts with 3
            for (int j=3; j<=(n>>1); j+=2)
                if ( (n%j) == 0) // n is divided by j without modulus - is it not prime
                {
                    prime = false;
                    break;
                }
        }

        if (prime)
            printf("prime\n");
        else
            printf("is not prime\n");
    }
} while (n >= 2);
于 2013-10-14T19:35:01.220 に答える
0

実際には sqrt(n) までチェックするだけで十分です。これにより、コードがはるかに高速に実行されます。

他の便利な方法については、この投稿をご覧ください。

于 2013-10-14T19:49:11.497 に答える