CSU 1030 素数槽
来源:互联网 发布:好看的校园网络电影 编辑:程序博客网 时间:2024/05/21 18:41
1030: 素数槽
Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 1576 Solved: 487
Description
处于相邻的两个素数p和p + n之间的n - 1个连续的合数所组成的序列我们将其称为长度为n的素数槽。例如,‹24, 25, 26, 27, 28›是处于素数23和素数29之间的一个长度为6的素数槽。
你的任务就是写一个程序来计算包含整数k的素数槽的长度。如果k本身就是素数,那么认为包含k的素数槽的长度为0。
Input
第一行是一个数字n,表示需要测试的数据的个数。后面有n行,每行是一个正整数k, k大于1并且小于或等于的第十万个素数(也就是1299709)。
Output
对于输入部分输入的每一个k,都对应输出一个非负整数,表示包含k的素数槽的长度,每个非负整数占一行。
Sample Input
51011272492170
Sample Output
4060114
解题思路:题目说明了最大素数,,那么可以先把素数筛选出来,然后进行查找,如果vis[k]=0,那么k是素数;否则,往k的左右去找最近的素数。
一个高效的素数筛选法:Eratosthenes筛法
模板:
const int maxn=100000001;int vis[maxn];int main(){ int m=(int)sqrt(maxn+0.5); for(int i = 2; i <= m; i++)///素数筛选 { if(vis[i]) continue; for(int j = i*i; j <= maxn; j+=i) vis[j]=1; }
代码如下:
#include <stdio.h>#include <math.h>#include <cstring>#include <algorithm>using namespace std;const int maxn=1300000;int vis[maxn];int main(){ int m=(int)sqrt(maxn+0.5); for(int i = 2; i <= m; i++)///素数筛选 { if(vis[i]) continue; for(int j = i*i; j <= maxn; j+=i) vis[j]=1; } int n,t; scanf("%d",&t); while(t--) { scanf("%d",&n); int x=0,y=0; if(vis[n]==0) printf("0\n"); else { for(int i=n-1; i>=2;i--) if(vis[i]==0){x=i; break;} for(int i=n+1; i<maxn;i++) if(vis[i]==0){y=i; break;} printf("%d\n",y-x); } } return 0;}
0 0
- csu 1030: 素数槽
- CSU 1030 素数槽
- CSU 1030 素数槽
- CSU 1030: 素数槽
- CSU 1030 素数槽
- CSU 1030 素数槽(素数打表+二分)
- CSU素数槽 判断多个素数怎么不超时(素数筛选)
- csu(欧拉函数+筛素数)
- CSU 1552: Friends(素数测试+二分匹配)
- csu 1552: Friends(大素数判断+二分图)
- CSU 1552-Friends(大数判断素数+二分匹配)
- CSU 1552 Friends(Miller_Rabin素数测试+二分图匹配)
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- 平衡二叉树(AVL)各种操作详细分析
- Jupyter Notebook 的快捷键
- NYOJ--2--括号配对问题
- POJ
- Mysql索引介绍及常见索引类别(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别
- CSU 1030 素数槽
- HDU 1195 Open the Lock
- 获得训练集和XML通过opencv自带程序opencv_createsamples.exe&opencv_traincascade.exe的问题
- c++输入输出总结
- 集合框架-Collection集合-2
- sprintf()和itoa()的区别
- maven setting.xml配置
- [字典树 最小树形图] Codeforces Gym 100307 NEERC 13 D. Dictionary
- android studio快捷键