您的位置:首页 > 其它

UVA 1644 Prime Gap

2015-08-20 17:05 435 查看
The sequence of n - 1 consecutive composite numbers (positive integers that are not prime and not equal to 1) lying between two successive prime numbers p 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 integer k , the length of the prime gap that contains k . For convenience,
the length is considered 0 in case no prime gap contains k .

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

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int maxx=1299709;

int a[maxx+5];
void E()
{
a[maxx]=0;
for(int i=2;i<maxx;i++)
{
for(int j=2;j<sqrt((double)i+0.5);j++)
{
if(i%j==0)
{
a[i]=1;
break;
}
}
}
}

int main()
{
int n;
memset(a,0,sizeof(a));
E();
while(cin>>n)
{
if(n==0)
break;
if(a
==0)
{
cout<<"0"<<endl;
continue;
}
int mx=n,mn=n;
while(a[mx]!=0||a[mn]!=0)
{
if(a[mx]!=0)
mx++;
if(a[mn]!=0)
mn--;
}
//cout<<mx<<"  "<<mn<<endl;
cout<<mx-mn<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: