【题意简述】:输入一个数,假设这个数是素数就输出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; }