确定用户输入的号码是否为素数的程序

时间:2013-10-14 19:13:27

标签: c

这个代码在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;
}

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

实际上只需检查sqrt(n)即可使代码运行得更快。

你可以查看this帖子了解其他有用的方法。