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
相关产品推荐
相关产品推荐

