如何优化这段代码来提高效率?
时间: 2024-10-21 08:03:15 浏览: 8
优化这段代码可以考虑以下两点来提高判断质数的效率:
1. **避免不必要的检查**:由于所有的合数都能分解成若干个质数乘积,所以只需要检查到`sqrt(num)`即可。当`num`有因子大于其平方根时,那么它必然还有一个小于或等于平方根的因子已经检查过了。因此,将`for`循环条件改为`i * i <= num`。
```cpp
for (int i = 2; i * i <= num; ++i)
```
2. **跳过偶数**:除了2以外,所有的偶数都不是质数,所以可以在循环开始前直接处理2的情况,之后只遍历奇数。
```cpp
if (num == 2) return true; // 2是唯一的偶数质数
if (num % 2 == 0) return false; // 其他偶数都不是质数
```
整合这两点改进后的代码如下:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int num) {
if (num <= 1)
return false;
if (num == 2) return true; // 优化:特殊处理2
if (num % 2 == 0)
return false; // 优化:仅检查奇数
for (int i = 3; i * i <= num; i += 2) {
if (num % i == 0)
return false;
}
return true;
}
int main() {
int number;
cout << "请输入一个整数:";
cin >> number;
if (isPrime(number))
cout << number << " 是质数\n";
else
cout << number << " 是合数\n";
return 0;
}
```
阅读全文