首页 > 代码库 > CSU1030素数槽
CSU1030素数槽
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的素数槽的长度,每个非负整数占一行。
这题目最需要注意的是不能超时,所以需要用到素数打表法来进行符合条件的素数位置,在通过下标相减得到最后的结果
代码如下:
1 #include <iostream> 2 #include<stdio.h> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 7 #define MAXN 1300000 8 int p[MAXN]; 9 10 void getPrim()11 {12 memset(p,1,sizeof(p));13 int n = (int)(sqrt(MAXN+0.5));14 for(int i=2;i<=n;i++){15 for(int j=i+i;j<=MAXN;j+=i) p[j]=0;16 }17 }18 int main()19 {20 int T,k;21 cin>>T;22 getPrim();23 while(T--){24 cin>>k;25 26 int top=k,floor=k;27 while(p[top]==0) top++;28 while(p[floor]==0) floor--;29 cout<<top-floor<<endl;30 31 }32 return 0;33 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。