【题意简述】:输入一个数,假设这个数是素数就输出0,假设不是素数就输出离它近期的两个素数的差值,叫做Prime Gap。
【分析】:这题过得非常险。由于我是打的素数表。
由于最大的素数是1299709,所以注意在打表时要使用long long。否则程序应该不能执行。注意这一点应该就能够了。
积累!
// 2984K 235Ms
#include<iostream>
using namespace std;
#define N 2000001
bool isprime[N];
long long prime[100001],nprime; // 注意long long
void doprime()
{
long long i,j; // !!注意
nprime = 1;
memset(isprime,true,sizeof(isprime));
isprime[1] = 0;
for(i = 2;i<=1299709;i++)
{
if(isprime[i])
{
prime[nprime++] = i;
for(j = i*i;j<=1299709;j+=i)
{
isprime[j] = false;
}
}
}
}
int main()
{
long long n;//注意。
doprime();
while(1)
{
cin>>n;
if(n == 0)
break;
for(long long i = 0;i<nprime;i++)
{
if(n == prime[i]){
cout<<0<<endl;
break;
}
if(n>prime[i]&&n<prime[i+1]){
cout<<prime[i+1]-prime[i]<<endl;
break;
}
}
}
return 0;
}