【问题标题】:To find if entered no. is prime or not. The output i am getting is quite weird查找是否输入了否。是否是素数。我得到的输出很奇怪
【发布时间】:2016-02-06 17:26:07
【问题描述】:

以下是我编写的用于查找是否输入的代码。是否是素数。请告诉我要纠正什么,因为输出很奇怪。

` #include<stdio.h>
  main()
 {
   int n,i;
   printf("enter a no.");
   scanf("%d", &n);
   for(i=2;i<=n/2;i++)
   {
        if(n%i==0)
        printf("its prime");
        else{
               printf("not prime");
             }
   }
}

The output is shown in the picture below:

【问题讨论】:

  • 图像中的输出与您的代码生成的完全匹配。你的问题到底是什么? (顺便说一句,你的整个 IDE 的图像不是必需的;学习捕获单个窗口的输出。大于必要的图形在移动设备上是不可读的,并且对那些为这些设备上的数据付费的用户非常不公平。)
  • 我只是想让系统告诉我是否。输入是否为素数。我哪里做错了?
  • 附注抱歉,图片较大。
  • 不,是来告诉你的代码有什么问题。这不是咨询或调试服务。而且您不得发布图片,但在您的问题中包含文字!学习How to Ask
  • 这段代码有几个错误。下面是其中一个的提示:如果数字是 15,并且您检查是否可以除以 2,发现不能,您将立即声明 15 是素数,但显然不是。实际上我倒退了,因为您的“主要”和“非主要”案例是倒退的。如果你可以将一个数除以一个因数,则该数不是质数,而不是相反。

标签: c for-loop primes


【解决方案1】:

我相信你不明白模数是如何工作的。根据Wikipedia,模运算求一个数除以另一个数后的余数(有时称为模数)。

当您询问if(n%i==0) 时,您是在询问n 除以i 是否得到余数0。以n=6i=3 为例。然后n%i==0 评估为“TRUE”,因为 6 可以被 3 整除。您的算法尝试打印数字是素数,而事实恰恰相反。以下代码应该可以工作:

#include<stdio.h>
  main()
 {
   int n,i;
   printf("enter a no.");
   scanf("%d", &n);
   for(i=2;i<=n/2;i++)
   {
        if(n%i==0)
        {
            printf("not prime");
            return 0; //Since you've already proved it's composite, there's no need to waste time.
        }
   }
  printf("Number is prime."); //If your number is not prime, this line won't execute as your program will exit with that return statement.
}

【讨论】:

    【解决方案2】:

    如果您担心答案会被多次打印,那么您不应该在 for 循环中打印答案语句。或者,使用“break”语句。 另外,使您的主要检查条件正确。

    #include<stdio.h>
    
    main() {
        int n, x;
    
        printf("Enter a number");
        scanf("%d", &n);
    
        for (x = 2; x <= n / 2; x++) {
            if (n % x == 0) {
                printf("Not prime");
                break;
            }
    
            else {
                printf("Prime");
                break;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2010-11-29
      • 2015-10-24
      • 1970-01-01
      相关资源
      最近更新 更多