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

来源:互联网 发布:手机淘宝一元秒杀攻略 编辑:程序博客网 时间:2024/06/05 20:11

题目:
这里写图片描述

• 题意:

给出一个正整数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<cstdio>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));}                                 
原创粉丝点击