素数筛选法
来源:互联网 发布:录制视频软件手机 编辑:程序博客网 时间:2024/06/06 04:01
题目链接
最开始筛选素数的代码
bool is_prime(int n ){ int sqrt_n=sqrt(n); for(int i=2;i<sqrt_n+1;i++) { if(n%i==0) return false; } return true;}
然后是一般的素数筛选法
#include<cstdio>#include <string>#include<iostream>#define MAX 900000int prime[900010]={1,1};using namespace std;int main(){ for(int i=2;i<MAX;i++) { if(!prime[i]) { for(int j=i*2;j<=MAX;j+=i) { prime[j]=1; } } } int m,n; scanf("%d%d",&m,&n); int pi=0; for(int k=0;k<MAX;k++) { if(prime[k]==0) { pi++; if(pi>=m&&pi<n) { printf("%d",k); if((pi-m+1)%10==0) printf("\n"); else printf(" "); } if(pi==n) { printf("%d",k); break; } } } return 0;}
快速素数筛选法:
原理:对于每一个数i,乘上小于等于i的最小素因数的素数,就得到以i为最大因数的合数。
#include<iostream>using namespace std;const int Max=2000000;long long prime[Max] = {0};int k=0;int a[Max]={1,1};void init(){ for(long long i=2;i<Max;i++) { if(!a[i])// prime[k++] = i; for(long long j=0;j<k&&i*prime[j]<Max;j++) { a[i*prime[j]] = 1; if(i%prime[j]==0)// break; } }}int main(){ int n; init(); while(cin>>n) { for(int i=0;i<n;i++) cout<<prime[i]<<" "; cout<<endl; }}
参考博文链接:
http://blog.csdn.net/bjrxyz/article/details/8125913
阅读全文
0 0
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- Eratoshenes素数筛选法
- 素数--超强筛选法
- 素数筛选法
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 素数筛选法
- 素数筛选法2
- 筛选法求素数/
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 内存分析
- 推荐系统实践---第三章:推荐系统冷启动问题
- 514. Paint Fence
- docker搭建redis集群
- TCP
- 素数筛选法
- 二叉树的递归遍历与复制
- 电脑每次开机总是自动还原怎么回事?
- 2大侧拉框对比:DrawerLayout 和 SlidingMenu
- 从JVM角度阐述Java数据类型
- [Leetcode从零开刷]728. Self Dividing Numbers
- js请求servlet
- ADC参数中的SNR、SNDR与SFDR的区别是什么
- 模型属性生成器,告别手动输入模型属性