题意:题目意思就是一个数夹在两个连续的素数之间,算出这两个素数的差并输出;
#include<iostream>
using namespace std;
const int LEN=1399706;
struct Prime
{
int x, y;
} isprime[LEN];
void Get_prime()
{
int i, j, k;
for(i=0; i<=LEN; i+=2)
isprime[i].x=0, isprime[i+1].x=1;
for(i=3; i*i<=LEN; i+=2)
{
if( isprime[i].x )
for(j=i*i, k=i+i; j<=LEN; j+=k)
isprime[j].x=0;
}
int mark=0;
for(i=LEN-1; i>=3; i-=2)
{
if( isprime[i].x )
{
mark=i;
break;
}
}
k=0;
mark=2;
isprime[2].x=1;
for(i=3; i<=LEN; i+=2)
{
//isprime[i].y=k;
if( isprime[i].x )
{
isprime[i].y=0;
j=i-1;
k=i-mark;
while( !isprime[j].x )
{
isprime[j].y=k;
--j;
}
//isprime[i].y=0;
//k=mark-isprime[i].x;
mark=i;
//k=isprime[i].y;
}
}
}
int main()
{
int n;
Get_prime();
while( cin >> n, n)
{
cout << isprime[n].y << endl;
}
return 0;
}