您的位置:首页 > 其它

通过二分的方法查找小于n的素数的个数

2014-08-27 14:35 344 查看
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1000;
int p[6666666], tot;
bool vis[maxn];
void get_prime(){
int i, j;
for (i = 2;i < maxn; i++) {
if (!vis[i]) p[++tot] = i;
for (j = 1; j <= tot; j++){
if (p[j] * i >= maxn)break;
vis[p[j]*i] = 1;
if (i % p[j] == 0){break;}
}
}
}
int Low_find(int n,int l,int r){

while(l<r){
int inx=(l+r)>>1;
if(p[inx]==n)return inx;
if(p[inx]<n)l=inx+1;
if(p[inx]>n)r=inx;
}
return l;
}
int main(){
get_prime();
int n;

for(int i=1;i<=100;i++){
cout<<p[i]<<" ";
}
cout<<endl;
for(n=1;n<100;n++){
cout<<Low_find(n,1, 100)-1<<endl;
//或直接使用lower_bound();
//cout<<lower_bound(p, p+100, n)-p-1<<endl;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: