C++质数判断程序输入1无输出问题求助
问题原因及修复方案
问题根源
当输入为1时,代码逻辑出现了遗漏:
- 1是奇数,满足
else if(input % 2 != 0)的条件,进入该分支 - 但分支内的for循环初始值
i=3,循环条件i <= input等价于3 <= 1,条件不成立,循环体根本不会执行,自然没有任何输出语句被触发
修复方案
根据质数的定义(大于1的自然数,且只能被1和自身整除),我们需要先单独处理input <= 1的情况,再处理后续逻辑。修复后的代码如下:
if(input <= 1){ std::cout << input << " is not a prime number.\n"; } else if(input == 2){ std::cout << input << " is a prime number.\n"; } else if(input % 2 != 0){ bool isPrime = true; // 优化:循环只需到sqrt(input),减少不必要的计算 for(int i = 3; i * i <= input; i+=2){ if(input % i == 0){ isPrime = false; break; } } if(isPrime){ std::cout << input << " is a prime number.\n"; } else{ std::cout << input << " is not a prime number.\n"; } } else{ std::cout << input << " is not a prime number.\n"; }
额外优化说明
原代码的for循环遍历到input本身效率较低,优化为遍历到sqrt(input)(用i*i <= input避免浮点运算),只要在这个范围内找到能整除的数,就说明不是质数,能大幅减少循环次数。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

