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

为何C语言nextPrime函数仅返回大于n的下一个整数?

问题原因与修复方案

你的代码问题出在isPrime函数的条件判断上:

if(!n%i)return 0;

C语言中运算符优先级是逻辑非! > 取模%,所以这个表达式会先计算!n——当n是大于等于2的自然数时,!n的结果是0,再用0对i取模,结果永远是0,导致这个if条件永远不成立。循环里的return 0从来不会被触发,所以isPrime对所有≥2的数都会返回1,自然nextPrime会直接返回第一个检查的数n+1。

修复方法很简单,给n%i加上括号,让取模运算先执行,再取逻辑非:

if(!(n%i))return 0;

修正后的完整代码:

#include <stdio.h>

int isPrime(int n)
{
    if(n<2)return 0;
    for(int i=2; i<n; ++i)
        if(!(n%i))return 0;
    return 1;
}

int nextPrime(int n)
{
    for(int i=n+1; ; ++i)
        if(isPrime(i))return i;
}

int main(void){

    int n;
    scanf("%d", &n);
    printf("%d", nextPrime(n));

    return 0;
}

额外优化建议:isPrime的循环可以只遍历到sqrt(n),比如把循环条件改成i*i <= n,能减少大量不必要的计算,提升函数效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:33:19