在C中查找是否为Prime的数字

时间:2015-08-02 11:03:38

标签: c primes

我正在编写一个C程序来查找数字是否为素数。每当我运行它并输入一个数字时,输入的值就会改变。请指出漏洞。

#include<stdio.h>
#include<conio.h>
int main()
{

    int x;
    int y;
    y=getchar();
    for(x=2;x<y;++x){
       if(y%x != 0 && y!=x)
            printf(" THE NUMBER %d is  A  PRIME \n", y);
        else
            printf(" \r THE NUMBER %d IS NOT A PRIME", y);
            break;
    }
}

我使用Code :: Blocks IDE和GCC Compiler

4 个答案:

答案 0 :(得分:5)

getchar返回单个字符的ASCII码。因此,您的程序会获取您输入的数字的第一个字符的ASCII代码,并检查它是否为素数。

相反,您需要读取整数:

scanf("%d", &y);

完整的计划:

#include<stdio.h>
#include<conio.h>
int main()
{

    int x;
    int y;
    scanf("%d", &y);
    for(x=2;x<y;++x){
       if(y%x != 0 && y!=x)
            printf(" THE NUMBER %d is  A  PRIME \n", y);
       else {
            printf(" \r THE NUMBER %d IS NOT A PRIME", y);
            break;
       }
    }
}

注意:您可以在x >= sqrt(y)

时停止

答案 1 :(得分:5)

顾名思义,getchar()从标准输入中获取单个字符。例如,如果输入 3 y将获得字符'3'的ASCII码,这显然不是您想要的。

尝试scanf

scanf("%d", &y);

答案 2 :(得分:2)

好吧,你正在调用用于输入单个字符的getchar(),这就是你的情况:

  • getchar()会返回一个字符。
  • 当您将字符存储在int类型的变量中时,将字符转换为整数。
  • 因此,整数包含输入字符的ASCII,即3将存储为51,这是输入更改的原因。

您需要做的是输入整数而不是字符。试试这个:

scanf("%d", &y);

希望这有帮助。

答案 3 :(得分:1)

关于y的输入的第一个答案是正确的:

scanf("%d", &y);

另外,请注意你应该循环到x的平方根,如果你想优化你的算法而不是更多(我不会在这里证明为什么,它是一个数学属性)。

#include <stdio.h>
#include <math.h>

// ...

int x;
int x_max;
int y;

scanf("%d", &y);
x_max = (int)floor(sqrt(y));

for(x=2;x<=x_max;++x){

// ...