通过二分的方法查找小于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; } } }
相关文章推荐
- ClientDataSet通过UpdateStatus方法配合Delta属性查找已删除的记录
- 二分查找 数组和指针方法
- Java 查找方法(普通查找,二分查找)
- 二分实现查找不小于x的第一个数/不大于x的最后一个数
- HDU 1397 Goldbach's Conjecture(二分,查找素数)
- 查找文件夹中的所有文件及子文件夹的方法,附源程序,VC7.1下编译运行通过
- 二分查找的两种实现方法
- ruby数组和哈希表的区别,递归,二分查找方法
- oops的解读方法-----怎么通过oops查找源码行
- POJ-Prime Gap 素数筛选+二分查找
- hdoj 4715 Difference Between Primes 素数筛选+二分查找
- 通过spy++查找应用程序菜单对应函数的方法
- VS2005通过指令地址查找其所在函数的方法
- 查找文件夹中的所有文件及子文件夹的方法,附源程序,VC7.1下编译运行通过
- HDU 2871 Memory Control 线段树(区间合并)+二分查找+vector的常用方法
- 通过四种方法查找字符A
- 通过spy++查找应用程序菜单对应函数的方法
- 通过Spy++查找应用程序菜单对应函数的方法
- 一个可能存在Bug的二分查找方法的实现,大家一起看看有什么问题没
- 素数筛的方法 筛出小于n的所有素数