首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找一个数字是否是C语言中的素数

问查找一个数字是否是C语言中的素数
EN

Stack Overflow用户
提问于 2015-08-02 19:03:38
回答 3查看 164关注 0票数 3

我在写一个C程序,用来判断一个数字是否为质数。每次我运行它并输入一个数字时,输入值都会发生变化。PLease指出了漏洞。

代码语言:javascript
复制
#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编译器

EN

回答 3

Stack Overflow用户

发布于 2015-08-02 19:07:53

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

相反,您需要读取一个整数:

代码语言:javascript
复制
scanf("%d", &y);

完整的程序:

代码语言:javascript
复制
#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)时停止

票数 5
EN

Stack Overflow用户

发布于 2015-08-02 19:16:19

好的,您正在调用getchar(),它用于输入单个字符,在您的示例中会发生以下情况:

  • getchar()返回一个character.
  • Character,然后当您将其存储在类型为int.
  • Hence的变量中时,该整数将转换为整数,该整数包含输入字符的ASCII码,即3将被存储为51,这是输入更改的原因。

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

代码语言:javascript
复制
scanf("%d", &y);

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2015-08-02 19:19:03

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

代码语言:javascript
复制
scanf("%d", &y);

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

代码语言:javascript
复制
#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){

// ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31771211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档