#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;
}
}
}
通过二分的方法查找小于n的素数的个数
最新推荐文章于 2022-02-27 19:52:27 发布