质数求和程序异常:输入9时误将9判定为质数致结果错误
质数求和程序错误分析与修复
错误原因
- 核心逻辑错误:
main函数中调用质数判断函数时,完全错误地使用了函数返回值。原代码中ifPrime(i); if(ifPrime) sum=sum+i;这部分,if(ifPrime)实际是在检查函数指针是否非空(永远为真),而非判断当前i是否为质数,导致所有奇数都被当成质数计入总和,包括9。 - 质数判断函数的健壮性缺失:原
ifPrime函数没有处理小于2的数的情况,虽然当前循环从3开始暂时没触发问题,但函数本身逻辑不完整。
修正后的代码
完善的质数判断函数
bool ifPrime(int n) { if (n <= 1) return false; if (n == 2) return true; if (n % 2 == 0) return false; for(int i=3; i*i<=n; i+=2) { if(n%i==0) return false; } return true; }
修正后的主函数
int main(){ int t, sum=0; cin >> t; for(int k = 0; k < t; k++){ int n; cin >> n; sum = 0; if(n >= 2) sum += 2; for(int i=3; i<=n; i+=2){ if(ifPrime(i)){ sum += i; } } cout << sum << endl; } return 0; }
修正效果
输入9时,ifPrime(9)会检测到9能被3整除,返回false,不会将9计入总和,最终计算结果为2+3+5+7=17,符合正确预期。
内容的提问来源于stack exchange,提问作者MD NUR_ 33
相关产品推荐
相关产品推荐

