我无法确定它是否是素数

时间:2018-05-25 13:26:13

标签: c

以下程序正确输出输入数字的除数,但它无法正确报告输入是否为素数。例如,当输入为13时,它不会打印"您输入的数字是素数。"它有什么问题?

#include <stdio.h>
#include <stdbool.h>

int main(void)
{
   int num;
   bool isPrime = true;

   printf("Enter a number: ");
   while (scanf("%d", &num) == 1)
   {
      for (int i = 2; i * i <= num; ++i)  
      {
         if (num % i == 0)
         {
            if (i * i != num)
            {
               printf("%d ve %d, divides %d\n", i, num / i, num);
            }
            else
            {
               printf("%d divides %d.\n", i, num);
            }

            isPrime = false;
         }
      }
   }

   if (isPrime)
   {
      printf("The number you entered is a prime number.");
   }

   return 0;
}

3 个答案:

答案 0 :(得分:1)

原因是如果有一个有效的输入但是你正在检查&amp ;,则scanf处于while循环中。打印如果它是循环之外的主要...如果你希望这个程序得到一个输入并验证一次,那么你只需要将while更改为if

#include <stdio.h>
#include <stdbool.h>

int main(void)
{
   int num;
   bool isPrime = true;

   printf("Enter a number: ");
   if (scanf("%d", &num) == 1)
   {
      for (int i = 2; i * i <= num; ++i)  
      {
         if (num % i == 0)
         {
            if (i * i != num)
            {
               printf("%d ve %d, divides %d\n", i, num / i, num);
            }
            else
            {
               printf("%d divides %d.\n", i, num);
            }

            isPrime = false;
         }
      }
   }

   if (isPrime)
   {
      printf("The number you entered is a prime number.");
   }

   return 0;
}

如果你希望这个程序循环继续获取输入并验证它是否为素数,那么这应该可以完成这项工作:

#include <stdio.h>
#include <stdbool.h>
int main(void)
{
   int num;
   bool isPrime = true;

   while (1)
   { 
       isPrime=true;
       printf("Enter a number: ");
       if (scanf("%d", &num) == 1)
       {
          for (int i = 2; i * i <= num; ++i)  
          {
             if (num % i == 0)
             {
                if (i * i != num)
                {
                   printf("%d ve %d, divides %d\n", i, num / i, num);
                } 
               else
               {
                   printf("%d divides %d.\n", i, num);
               }

                isPrime = false;
             }
          }
       }

       if (isPrime)
       {
          printf("The number you entered is a prime number.\n");
       }
   }

   return 0;
}

答案 1 :(得分:-1)

你错过了两件事!

  1. 你应该在while循环中打印!
  2. 除此之外,您还没有更改isPrime=true;
  3. 的状态

    希望这能回答你的问题!

     #include <stdio.h>
        #include <stdbool.h>
    
        int main(void)
        {
        int num;
        bool isPrime = true;
        while (scanf("%d", &num) == 1)
        {
            for (int i = 2; i * i <= num; ++i)
            {
                if (num % i == 0)
                {
                    if (i * i != num)
                    {
                        printf("%d ve %d, divides %d\n", i, num / i, num);
                    }
                    else
                    {
                        printf("%d divides %d.\n", i, num);
                    }
    
                    isPrime = false;
                }
            }
    
            if (isPrime)
            {
                printf("The number you entered is a prime number.\n");
            }
            isPrime=true;
        }
    
    
    
        return 0;
        }
    

答案 2 :(得分:-1)

当您输入素数时,您的while循环不会中断。试试吧:

#include <stdio.h>
#include <stdbool.h>


int main(void) {
int num;
bool isPrime = true, finishIt = false;

printf("Enter a number: ");
while (1) {
    while (1) {
        if (scanf("%d", &num) != 1)
            continue;

        if (num == 0) {
            finishIt = true;
            break;
        }


        int i;
        for (i = 2; i * i <= num; ++i) {
            if (num % i == 0) {
                if (i * i != num) {
                    printf("%d ve %d, divides %d\n", i, num / i, num);
                } else {
                    printf("%d divides %d.\n", i, num);
                }

                isPrime = false;
            }
        }

        if (i * i >= num)
            break;
    }

    if (isPrime) {
        printf("The number you entered is a prime number.");
    }

    isPrime = true;

    if (finishIt)
        break;
}

return 0;
}