Prime Gap(POJ-3518)
Problem Description
The sequence of n ? 1 consecutive composite numbers (positive integers that are not prime and not equal to 1) lying between two successive prime numbers p and p + n is called a prime gap of length n. For example, ?24, 25, 26, 27, 28? between 23 and 29 is a prime gap of length 6.
Your mission is to write a program to calculate, for a given positive integer k, the length of the prime gap that contains k. For convenience, the length is considered 0 in case no prime gap contains k.
Input?
The input is a sequence of lines each of which contains a single positive integer. Each positive integer is greater than 1 and less than or equal to the 100000th prime number, which is 1299709. The end of the input is indicated by a line containing a single zero.
Output
The output should be composed of lines each of which contains a single non-negative integer. It is the length of the prime gap that contains the corresponding positive integer in the input if it is a composite number, or 0 otherwise. No other characters should occur in the output.
Sample Input
10
11
27
2
492170
0
Sample Output
4
0
6
0
114
題意:兩個(gè)素?cái)?shù) a、b 之間的區(qū)間 (a,b]?稱謂非素?cái)?shù)區(qū)間,給出一個(gè)數(shù) n,求 n 所在的非素?cái)?shù)區(qū)間長(zhǎng)度。
思路:先打表求素?cái)?shù),若 n 為素?cái)?shù),則長(zhǎng)度為0,若 n 為合數(shù),找出相鄰兩素?cái)?shù),長(zhǎng)度為兩素?cái)?shù)差
Source Program
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<set> #include<map> #include<stack> #include<ctime> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 5000005 #define MOD 1e9+7 #define E 1e-6 #define LL long long using namespace std; LL prime[N],cnt; bool bprime[N]; void make_prime() {memset(bprime,true,sizeof(bprime));bprime[0]=false;bprime[1]=false;for(LL i=2;i<=N;i++){if(bprime[i]){prime[cnt++]=i;for(LL j=i*i;j<=N;j+=i)bprime[j]=false;}} } int main() {make_prime();LL n;while(scanf("%lld",&n)!=EOF&&n){if(bprime[n])printf("0\n");else{for(LL i=0;i<cnt;i++)if(prime[i]<n&&prime[i+1]>n)printf("%lld\n",prime[i+1]-prime[i]);}}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的Prime Gap(POJ-3518)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 刻录光盘(信息学奥赛一本通-T1383)
- 下一篇: 周末舞会(信息学奥赛一本通-T1332)