处于相邻的两个素数p和p + n之间的n - 1个连续的合数所组成的序列我们将其称为长度为n的素数槽。例如,?24, 25, 26, 27, 28?是处于素数23和素数29之间的一个长度为6的素数槽。
你的任务就是写一个程序来计算包含整数k的素数槽的长度。如果k本身就是素数,那么认为包含k的素数槽的长度为0。
标签:
素数槽
处于相邻的两个素数p和p + n之间的n - 1个连续的合数所组成的序列我们将其称为长度为n的素数槽。例如,?24, 25, 26, 27, 28?是处于素数23和素数29之间的一个长度为6的素数槽。
你的任务就是写一个程序来计算包含整数k的素数槽的长度。如果k本身就是素数,那么认为包含k的素数槽的长度为0。
第一行是一个数字n,表示需要测试的数据的个数。后面有n行,每行是一个正整数k, k大于1并且小于或等于的第十万个素数(也就是1299709)。
对于输入部分输入的每一个k,都对应输出一个非负整数,表示包含k的素数槽的长度,每个非负整数占一行。
5
10
11
27
2
492170
4
0
6
0
114
代码如下:
#include<cstdio> bool p[1299710]; #include<cstring> using namespace std; void prime() { int i,j; memset(p,0,sizeof(p)); for(int i=2;i<=1299709;i++) { if(!p[i]) { for(int j=2;i*j<=1299709;j++) p[i*j]=1; } } } int main() { int n,a,sum,k,t; prime(); scanf("%d",&n); while(n--) { sum=0; scanf("%d",&a); if(!p[a]||a==1) { printf("%d\n",sum); continue; } t=a; while(a--) { if(p[a]) sum+=1; else break; } while(t++) { if(p[t]) sum+=1; else break; } printf("%d\n",sum+2); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a1967919189/article/details/46928033