B -B
Crawling in process...Crawling failedTime Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uDescription
The sequence of n − 1 consecutive composite numbers (positive integers that are not prime and not equal to 1) lying between two successive prime numbersp and p + n is called a prime gap of length n.
For example, ‹24, 25, 26, 27, 28› between 23 and 29 is a prime gap of length 6.
Your mission is to write a program to calculate, for a given positive integerk, the length of the prime gap that contains k.
For convenience, the length is considered 0 in case no prime gap containsk.
Input
The input is a sequence of lines each of which contains a single positive integer.
Each positive integer is greater than 1 and less than or equal to the 100000th prime number, which is 1299709.
The end of the input is indicated by a line containing a single zero.
Output
The output should be composed of lines each of which contains a single non-negative integer.
It is the length of the prime gap that contains the corresponding positive integer in the input if it is a composite number, or 0 otherwise.
No other characters should occur in the output.
Sample Input
10
11
27
2
492170
0
Sample Output
4
0
6
0
114
这道题就是一道数论的水题,先判断输入的n是否为素数,如果是素数的话,直接输出0,如果不是素数的话找到两个连续的素数,分别大于n和小于n输出这两个素数的差就可以了,当然你也可以构造素数表。
AC代码:
#include<iostream>
#include<cstring>
#include<algorithm>
const int MAX=1299710;
__int32 prime[MAX];
__int32 s[MAX];
__int32 number;
using namespace std;
int main()
{
__int32 i,j,n,k;
for(i=2;i<MAX;++i)
{
s[i]=0;
}
for(i=2;i<MAX;++i)
{
for(k=i*2;k<MAX;k+=i)
{
s[k]=1;
}
}
number=0;
for(i=2;i<1299710;++i)
if(s[i]==0)
prime[number++]=i;
int prime_huan(__int32 n);
while(cin>>n)
{
if(n==0)
break;
if(prime_huan(n))
{
cout<<0<<endl;
continue;
}
for(i=0;i<number;++i)
{
if(prime[i]<n&&prime[i+1]>n)
cout<<(prime[i+1]-prime[i])<<endl;
}
}
return 0;
}
int prime_huan(__int32 n)
{
__int32 i;
if(n==2)
return 1;
if(n<=1||n%2==0)
return 0;
i=3;
while((i*i)<=n)
{
if(n%i==0)
return 0;
i+=2;
}
return 1;
}