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

C语言素数判断程序为何会错误将987判定为素数?

素数判断代码错误原因分析

核心错误点

你的代码逻辑错误出在for循环内的判断分支写反了返回时机,循环只会执行i=2的第一次判断就直接返回结果,完全不会校验后续的除数:

  • 只要输入值除以2的余数不为0,函数就直接返回1判定为素数,不会检查3及以上的数是否能整除输入值
  • 987除以2的余数为1,所以第一次循环就直接返回1,才会把非素数的987错判为素数,测试用例里11、383刚好除以2余1,只是碰巧输出结果正确,不代表逻辑没问题。

符合要求的修正代码(仅使用for循环和if语句)

#include <stdio.h>
int is_prime(int n){
  // 小于等于1的数不是素数
  if (n <= 1) {
    return 0;
  }
  for (int i=2;i<n;i++){
    // 只要找到一个能整除的数,直接判定不是素数
    if (n%i==0){
      return 0;
    }
  }
  // 所有除数都校验完没找到能整除的,才是素数
  return 1;
}

int main(void){
  printf("%d\n", is_prime(11));  // 11 is a prime.      Should print 1.
  printf("%d\n", is_prime(383)); // 383 is a prime.     Should print 1.
  printf("%d\n", is_prime(987)); // 987 is not a prime. Should print 0.
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:06:00