Sicily 1500. Prime Gap | 运用数论结论:10^9以内,两个相邻素数距离不超过400

题目:
Sicily 1500. Prime Gap | 运用数论结论:10^9以内,两个相邻素数距离不超过400_第1张图片

• 题意:

给出一个正整数k,找到与之相邻的两个素数,并求出两个素数之差。如果不存在两个相邻的素数则输出0。

限制: 1<=k<=1299709

• 分析:

有一个结论,素数的分布相对密集,在10^9以内,两个相邻素数距离不超过400 ,所以可以直接向前和向后枚举素数

代码:

// Problem#: 1500
// Submission#: 5124813
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include
using namespace std;

bool isPrime(int n) 
{
   for(int i=2;i*i<=n;i++)
        if(n%i==0) return false;
    return true;
}
int getAnswer(int n)
{
   int gap=400;
   int fir,sec;
   for(sec=n;sec<=n+gap&&!isPrime(sec);sec++);//向后查找
   if(sec>n+gap) return 0;
   for(fir=n;fir>=n-gap&&!isPrime(fir);fir--);//向前查找
   if(fir<=0) return 0;
   return sec-fir;
}
int main()
{    
    int a;
    while(scanf("%d",&a)&&a)
        printf("%d\n",getAnswer(a));
}                                 

你可能感兴趣的:(Oj)