给定一个数N,得到N以内的所有素数,可以利用素数筛法来做,代码如下:
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
vector<int> sievePrimes(int n){
vector<int> result;
vector<bool> flag(n+1, true);
flag[0] = flag[1] = false;
const int high = sqrt(n);
for(int i = 2; i <= high; ++i){
if(flag[i]){
for(int j = i*i; j <= n; j += i){
flag[j] = false;
}
}
}
for(int i = 2; i <= n; ++i){
if(flag[i]) result.push_back(i);
}
return result;
}
int main(){
int n;
while(cin >> n){
vector<int> primes = sievePrimes(n);
for(auto prime : primes){
cout << prime << " ";
}
}
return 0;
}
本文介绍了一种使用素数筛法求解指定范围内所有素数的方法,并提供了完整的C++实现代码。该算法首先标记2到N之间的所有整数为潜在的素数,然后迭代地排除掉每个已知素数的倍数,最终剩下的即为素数。
914

被折叠的 条评论
为什么被折叠?



