You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编程:素数判断代码问题求助

帮你排查素数判断代码的问题

嘿,我帮你找出了代码里的几个关键问题,咱们逐个解决:

1. 输入读取的错误

你用getchar()来获取输入数字,但这个函数读取的是字符的ASCII码值,比如你输入数字5,它实际拿到的是53(ASCII表中'5'对应的编码),这和你想要的整数完全不符。应该换成scanf("%d", &x)来正确读取整数。

2. 素数判断函数的逻辑错误

你的prime函数逻辑有大问题:第一次循环i=2时,如果x%i != 0,就直接return true了。比如测试x=9,9%2=1,函数会立刻返回true,但9明显不是素数。

正确的逻辑应该是:

  • 遍历所有从2到sqrt(x)的数,只要找到能整除x的数,就返回false
  • 如果整个循环跑完都没找到能整除的数,再返回true

所以要把return true移到循环外面,去掉多余的else分支。

3. 缺少必要的头文件

你使用了bool类型,但没有包含<stdbool.h>头文件,大部分编译器会因此报错,记得补上这个头文件。


修正后的完整代码

#include <stdio.h>
#include <stdbool.h>  // 新增:使用bool类型需要的头文件

bool prime(int);
int main() {
    int x;
    scanf("%d", &x);  // 替换getchar(),正确读取整数
    if (x < 2)
        printf("its not prime\n");
    else {
        if (prime(x))
            printf("its prime\n");
        else
            printf("its not prime\n");
    }
    return 0;
}

bool prime(int x) {
    for (int i = 2; i*i <= x; i++) {
        if (x%i == 0) {
            return false;
            // break在这里没用,因为return已经终止函数了,可以删掉
        }
    }
    // 循环结束后才返回true,说明所有i都不能整除x
    return true;
}

你可以测试几个边界值:比如输入2(最小素数)、4(合数)、9(奇数合数)、17(素数),看看结果是否正确。

内容的提问来源于stack exchange,提问作者Bartek Wach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:38:46