本博客主要讨论求解给定数[2,n)
以内的素数表(注意不包含数字n
)的方法。
暴力求解法( O ( n 2 ) O(n^2) O(n2))
在开始接触编程的时候,大多数人都是这样求解n
以内的素数表的:
vector<int>prime;//素数表存储在prime中,prime是全局变量
void findPrime(int n){
for(int i=2;i<n;++i){
bool f=true;
for(int j=2;j<i&&f;++j){
if(i%j==0)
f=false;
}
if(f)
prime.push_back(i);
}
}
时间复杂度达到 O ( n 2 ) O(n^2) O(n2)
我们可以做一下优化,如下:
vector<int>prime;//素数表存储在prime中,prime是全局变量
void findPrime(int n){
for(int i=2;i<n;++i){
bool f=true;
int k=(int)(sqrt(i*1.0));//取i的平方根作为上限
for(int j=2;j<=k&&f;++j){
if(i%j==0)
f=false;
}
if(f)
prime.push_back(