您的位置:首页 > 其它

POJ 3518 Prime Gap(素数题)

2016-02-18 12:01 363 查看
【题意简述】:输入一个数,假设这个数是素数就输出0,假设不是素数就输出离它近期的两个素数的差值,叫做Prime Gap。

【分析】:这题过得非常险。由于我是打的素数表。

由于最大的素数是1299709,所以注意在打表时要使用long long。否则程序应该不能执行。注意这一点应该就能够了。

积累!

// 2984K 235Ms
#include<iostream>
using namespace std;
#define N 2000001

bool isprime
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: