POJ 3518 Prime Gap(素数题)

来源:互联网 发布:江西省安全网络答题 编辑:程序博客网 时间:2024/05/13 02:49

【题意简述】:输入一个数,如果这个数是素数就输出0,如果不是素数就输出离它最近的两个素数的差值,叫做Prime Gap。

【分析】:这题过得很险,因为我是打的素数表。由于最大的素数是1299709,所以注意在打表时要使用long long,否则程序应该不能运行。注意这一点应该就可以了。积累!

// 2984K 235Ms #include<iostream>using namespace std;#define N 2000001bool 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;} 


0 0