【题意简述】:输入一个数,如果这个数是素数就输出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; }
原文地址:http://blog.csdn.net/u013749862/article/details/39639361