素数筛法求素数(线性时间)
2013-09-05 22:22
295 查看
摘自:/article/10592210.html
逆向思维的典型应用!
1)普通方法判断素数:O(n*sqrt(n))
2)筛法求素数:线性时间,即O(n)
逆向思维的典型应用!
1)普通方法判断素数:O(n*sqrt(n))
2)筛法求素数:线性时间,即O(n)
// 1:这是最原始的筛法,还有待优化 #define Max 1000000 bool prime[Max]; void IsPrime(){ prime[0]=prime[1]=0;prime[2]=1; for(int i=3;i<max;i++) prime[i]=i%2==0?0:1; int t=(int)sqrt(Max*1.0); for(int i=3;i<=t;i++) if(prime[i]) for(int j=i;j<Max;j+=i) prime[j]=0; } //2:优化后的筛法,手动地模拟原始筛法就可以发现,某个数字可能被不止一次地删去 // 优化后的筛法就可以避免这种不必要的删去操作 #define Max 1000000 bool prime[Max]; void IsPrime(){ prime[0]=prime[1]=0;prime[2]=1; for(int i=3;i<max;i++) prime[i]=i%2==0?0:1; int t=(int)sqrt(Max*1.0); for(int i=3;i<=t;i++) if(prime[i]) for(int j=i*i;j<Max;j+=2*i)//优化 prime[j]=0; }
相关文章推荐
- (转载)线性时间内筛素数和欧拉函数
- 线性时间素数筛
- 线性时间 筛素数,求前n个数的欧拉函数值,求前n个数的约数个数
- 线性时间筛素数
- 对于线性时间筛选素数算法的理解
- 线性时间内筛素数和欧拉函数
- 线性时间内筛素数+欧拉函数+莫比乌斯函数
- 利用积性函数的优化(线性时间:筛素数、求1~n的欧拉函数、约数个数)
- 利用积性函数的优化(线性时间:筛素数、求1~n的欧拉函数、约数个数)
- poj 2689 线性时间筛选素数
- 一个线性时间复杂度的质因数分解函数(查找全部的素数、得到全部的质因数分解个数)
- 线性时间 筛素数,求前n个数的欧拉函数值,求前n个数的约数个数
- 线性时间内筛素数+欧拉函数+莫比乌斯函数
- 线性O(N)时间复杂度求素数 , 筛法
- 寻找 最小的k个数 线性选择算法 平均时间复杂度 O(n)
- 第8章:线性时间排序
- 线性时间内查找第k个最小数
- 线性时间选择(TOP K)
- 0006算法笔记——【分治法】线性时间选择
- 最坏情况为线性时间的选择算法