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

C语言区间素数查找程序求助:程序误打印所有数字

修复C语言素数检测程序的问题

原代码的核心问题

  • 函数职责错位:isPrime函数本该负责判断一个数是否为素数,但原代码在循环中直接打印i,完全偏离了函数的核心功能。
  • 逻辑逻辑混乱:原函数中只要flag为0就打印i,导致循环过程中的每个i都被输出,而非判断目标数number是否为素数。
  • 缺少返回值:isPrime声明为int类型但无返回语句,属于未定义行为。
  • 边界情况未处理:未考虑number < 2的情况(1、0、负数都不是素数)。

修正后的完整代码

// 判断一个数是否为素数,返回1表示是素数,0表示不是
int isPrime(int number) {
    // 小于2的数直接排除
    if (number < 2) {
        return 0;
    }
    // 2是唯一的偶素数
    if (number == 2) {
        return 1;
    }
    // 偶数(除2外)直接排除
    if (number % 2 == 0) {
        return 0;
    }
    // 只需要检查到sqrt(number),且只遍历奇数,优化效率
    for (int i = 3; i * i <= number; i += 2) {
        if (number % i == 0) {
            return 0;
        }
    }
    return 1;
}

int main() { 
    int x, y;
    scanf("%d %d", &x, &y);
        
    // 遍历区间内的每个数,调用isPrime判断后打印素数
    for (int i = x; i <= y; ++i) {
        if (isPrime(i)) {
            printf("%d\n", i);
        }
    }
    
    return 0;
}

修正说明

  • 让isPrime专注于素数判断,返回布尔标识(1/0),由主函数负责打印操作,符合单一职责原则。
  • 补充边界处理:直接排除小于2的数、偶数(除2外),减少无效判断。
  • 优化循环效率:仅遍历到目标数的平方根,且只检查奇数,大幅减少循环次数。
  • 补全函数返回值,避免未定义行为。

内容的提问来源于stack exchange,提问作者Marco Miguelote

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:23:37