C++查找给定范围最后一个质数并在打印后跳出循环
查找给定范围最大质数的代码修正方案
核心修改点
- 调整
prime_bef函数的返回值类型为bool,不再在函数内部直接输出结果,判断为质数时返回true,否则返回false,避免无效输出。 - 在
main函数的倒序遍历逻辑中,只要检测到prime_bef返回true,就输出当前数值,再调用break直接终止遍历,停止后续判断。 - 可选优化质数判断逻辑:将判断因数的遍历上限改为
sqrt(n),大幅减少不必要的循环次数,提升执行效率。
修改后的完整代码
#include <iostream> #include <cmath> using namespace std; bool prime_bef(int n) { // 小于2的数肯定不是质数 if (n < 2) { return false; } // 遍历到平方根即可,超过平方根的因数必然和前面的小因数成对出现 for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) { // 存在除了1和自身之外的因数,不是质数 return false; } } return true; } int main () { int l; int u; cin >> l >> u; for (int i = u; i >= l; i--) { if (prime_bef(i)) { cout << i << endl; // 找到第一个质数直接终止循环 break; } } return 0; }
逻辑说明
代码按照你设想的倒序遍历逻辑执行,从范围上限开始逐个判断是否为质数,第一个匹配的就是范围内最大的质数,找到后立刻终止遍历,不会执行多余的判断步骤。
内容的提问来源于stack exchange,提问作者NerdNet
相关产品推荐
相关产品推荐

