POJ Prime Gap

Prime Gap
Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 6841   Accepted: 3946

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

Source

 
打个素数表,查找一下就可以了
 
View Code
 1 #include<stdio.h>
 2 typedef __int64 LL ;
 3 int f[1300000] , prime[100010],count = 0 ;
 4 void getPrime(){
 5     for(int i=2;i<=1299709;i++)
 6         if(!f[i]){
 7             prime[count++] = i;
 8             for(LL j=(LL)i*i;j<=1299709;j+=i)
 9                 f[j] = 1 ; 
10         }
11 }
12 int BinarySearch(int n){
13     int left = 0,right = count-1, mid ;
14     mid = (left + right) >> 1;
15     while( (prime[mid-1] < n && prime[mid] < n )|| (prime[mid-1] > n) && prime[mid] > n){
16         if(prime[mid] < n)
17             left = mid ;
18         else
19             right = mid ;
20         mid = (left + right) >> 1;
21     }
22     return (prime[mid] - prime[mid-1]);
23 }
24 int main(){
25     getPrime();
26     int n;
27     while(scanf("%d",&n) && n ){
28         if(f[n] == 0)
29             printf("%d\n",0) ;
30         else
31             printf("%d\n",BinarySearch(n)) ;
32     }
33     return 0;
34 }

 

posted @ 2012-08-16 11:58  3111006139  阅读(114)  评论(0编辑  收藏  举报