优化这段求质数的c++代码:#include <iostream> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { int sum = 0; for (int k=2;k<=i;k++) { if (i%k==0) { sum+=k; } } if (sum == i) { cout << i << " "; } } return 0; }
时间: 2024-02-14 18:26:41 浏览: 150
您好!为了优化这段求质数的 C++ 代码,我们可以使用一种更高效的算法,例如埃拉托斯特尼筛法(Sieve of Eratosthenes)。该算法可以在 O(n log log n) 的时间复杂度内找到小于等于 n 的所有质数。
下面是优化后的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
vector<bool> sieve(int n) {
vector<bool> isPrime(n + 1, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
return isPrime;
}
int main() {
int n;
cin >> n;
vector<bool> isPrime = sieve(n);
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
cout << i << " ";
}
}
return 0;
}
```
这段代码使用了一个名为 `sieve` 的函数来实现埃拉托斯特尼筛法。函数返回一个 `vector<bool>`,其中索引表示数字,索引对应的值表示该数字是否为质数。在 `main` 函数中,我们调用 `sieve` 函数并遍历结果,输出所有的质数。
通过使用埃拉托斯特尼筛法,我们减少了不必要的计算和循环次数,从而提高了代码的效率。
阅读全文