C++质数判断函数问题:为何原代码误将9判定为质数?
为什么你的isPrime函数会误判9为质数?
嘿,我来帮你把这个逻辑理明白!咱们先看看你原来的代码:
bool isPrime(int n) { for (int i = 2; i < n; i++) { if (n % i == 0) return false; else return true; } }
问题就出在那个else return true上——它让你的循环只执行了一次就直接退出了!
拿n=9来举例:
- 第一次循环i=2,计算9%2结果是1(不等于0),触发else分支直接return true。
- 这时候函数直接结束,完全没机会检查i=3的情况(而9%3刚好等于0,这才是判断它不是质数的关键)。
换句话说,你的原函数逻辑变成了:只要n不能被2整除,就直接判定它是质数,这显然不对,因为还有3、5、7这些可能的因数呢!
那移除else之后为什么就对了?咱们看修改后的代码:
bool isPrime(int n) { for (int i = 2; i < n; i++) { if (n % i == 0) return false; } // 循环跑完了都没找到能整除n的数,才返回true return true; }
这里的逻辑是:
- 遍历从2到n-1的所有整数,只要找到任何一个能整除n的数,立刻返回false(说明不是质数)。
- 如果循环完整执行完了,意味着所有i都试过了,没有找到能整除n的数,这时候才返回true(确实是质数)。
顺便提个小建议:这个函数还有边界情况要处理,比如n<=1的时候应该直接返回false,n=2的时候(最小的质数)也能正确返回true,你可以加上这些判断让函数更严谨:
bool isPrime(int n) { if (n <= 1) return false; if (n == 2) return true; for (int i = 2; i < n; i++) { if (n % i == 0) return false; } return true; }
这样就完全没问题啦!
内容的提问来源于stack exchange,提问作者Lydia
相关产品推荐
相关产品推荐

