筛选法求素数(高效)——例题:孪生素数问题
来源:互联网 发布:perl和python哪个好 编辑:程序博客网 时间:2024/05/22 00:34
- 输入
- 第一行给出N(0<N<100)表示测试数据组数。
接下来组测试数据给出m,表示找出m之前的所有孪生素数。
(0<m<1000000) - 输出
- 每组测试数据输出占一行,该行为m范围内所有孪生素数组数。
- 样例输入
114
- 样例输出
4
筛选法求素数原理:当i是素数的时候,i的所有的倍数必然是合数。
一个简单的筛素数的过程:n=30。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
第 1 步过后2 4 ... 28 30这15个单元被标成false,其余为true。
第 2 步开始:
i=3; 由于prime[3]=true, 把prime[6], [9], [12], [15], [18], [21], [24], [27], [30]标为false.
i=4; 由于prime[4]=false,不在继续筛法步骤。
i=5; 由于prime[5]=true, 把prime[10],[15],[20],[25],[30]标为false.
i=6>sqrt(30)算法结束。
第 3 步把prime[]值为true的下标输出来:
for(i=2; i<=30; i++)
if(prime[i]) printf("%d ",i);
结果是 2 3 5 7 11 13 17 19 23 29
例题地址:点击打开链接
#include <bits/stdc++.h>//筛选法求素数using namespace std;#define N 1000001bool prime[N];int main(){ int i,j,t,n,sum,a; for(i=2;i<N;i++)//首先偶数一定不是素数 { if(i%2) prime[i]=true; else prime[i]=false; } for(i=3;i<=sqrt(N);i++) { if(prime[i]) for(j=i+i;j<N;j=j+i)//当i是素数的时候,i的所有的倍数必然是合数 prime[j]=false; } scanf("%d",&t); while(t--) { a=0; sum=0; scanf("%d",&n); for(i=3;i<=n;i++) { if(prime[i]) { if(i-a<=3) { sum++; } a=i; } } printf("%d\n",sum); } return 0;}
阅读全文
1 0
- 筛选法求素数(高效)——例题:孪生素数问题
- nyoj26_孪生素数(筛选法求素数)
- 素数筛选法----孪生素数问题
- nyist 26 孪生素数问题(筛选法)
- 例题3-17(筛选法求素数)
- 素数筛(筛选法求素数)
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数/
- 筛选法求素数
- 筛选法求素数
- 【学无止境】关于通过PHP链接FTP或SFTP的问题及解决--FTP篇
- Comparator比较器和Comparable接口
- python matplotlib 绘制双Y轴曲线图
- 关于MySQL数据库的存储引擎
- CentOS 7 找回root密码
- 筛选法求素数(高效)——例题:孪生素数问题
- 用python实现简单的文本情感分析
- Hibernate 积累
- CSS 如何让Table的里面TD全有边框 而Table的右左边框没有
- php队列应用场景
- Android程序与SNI服务器通信导致SSLPeerUnverifiedException发生
- Hibernate的4种继承关系
- spring boot: Whitelabel Error Page的解决方案
- Hibernate懒加载