素数筛选法(普通筛和线性筛)
来源:互联网 发布:淘宝新手开店 编辑:程序博客网 时间:2024/05/21 11:25
题目:给定一个n,求1~n的所有素数。
下面介绍两种素数筛选法:
第一种:普通筛法。
时间复杂度是O(nloglogn),不足之处在于一个合数可能被筛选多次。
代码:
void Prime (){memset(tag,0,sizeof(tag));tag[0]=tag[1]=1;for(int i=2; i*i <= n; i++)if(tag[i]==0){prime[ct++]=i;for(int j=i+i;j<=n;j+=i)tag[j]=1;}}
第二种:线性筛。
时间复杂度为O(n),原因在于每个合数保证只被它最小的那个质因子筛选。关键代码在第10,11行,因为如果i能整出prime[j],那么i肯定是个合数,且i中有质因子肯定小于等于prime[j],所以到此就可以停止了,因为后面的prime[]会比i小的那个质因子要大。
代码:
void Prime(){memset(tag,0,sizeof(tag));int cnt=0;tag[0]=tag[1]=1;for(int i = 2; i<N; i++){if(!tag[i])prime[cnt++]=i;for(int j=0;j<cnt && prime[j]*i<N; j++){tag[i*prime[j]] = 1;if(i % prime[j]==0)break;}}}
阅读全文
0 0
- 素数筛选法(普通筛和线性筛)
- 素数筛选之“普通筛选”和“线性筛选”
- 普通筛素数及线性筛素数
- 线性筛选素数法
- 素数线性筛选法
- 素数筛(筛选法求素数)
- 素数筛选法(素数筛)
- 求素数(普通+筛选)
- 【算法】普通方法和筛选法求素数
- 筛选求素数和普通求法(C/python略)
- 线性筛选素数(欧拉筛选)
- 线性筛选素数(模板)
- 线性筛选素数和线性筛选欧拉函数【bzoj2190]
- 普通素数筛法
- 线性求欧拉函数值和筛选素数
- 线性筛选素数法(O(n)复杂度)
- 快速线性筛选法求素数(质数)
- 线性素数筛法
- okhttp使用
- 使用 Polyfill 而不再是 bable 来实践js新特性
- RIP和OSPF
- 多窗口模式(multi-window mode)
- django 时区设置
- 素数筛选法(普通筛和线性筛)
- TI单节电量计基本介绍及常见问题解答
- java中enum的基本特性
- Device Tree(一):背景介绍
- notify()和notifyAll()区别
- rabbit mq配置文件
- Codeforces 812A-Sagheer and Crossroads
- 数字电子技术复习(六)——存储器与可编程逻辑器件
- tar 分包压缩与合并