Primes on Interval
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
Submit
Status
Description
You've decided to carry out a survey in the theory of prime numbers. Let us remind you that a prime number is a positive integer that has exactly two distinct positive integer divisors.
Consider positive integers a, a + 1, ..., b (a ≤ b). You want to find the minimum integer l (1 ≤ l ≤ b - a + 1) such that for any integer x (a ≤ x ≤ b - l + 1) among l integers x, x + 1, ..., x + l - 1 there are at least k prime numbers.
Find and print the required minimum l. If no value l meets the described limitations, print -1.
Input
A single line contains three space-separated integers a, b, k (1 ≤ a, b, k ≤ 106; a ≤ b).
Output
In a single line print a single integer — the required minimum l. If there's no solution, print -1.
Sample Input
Input
2 4 2
Output
3
Input
6 13 1
Output
4
Input
1 4 3
Output
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
Submit
Status
Description
You've decided to carry out a survey in the theory of prime numbers. Let us remind you that a prime number is a positive integer that has exactly two distinct positive integer divisors.
Consider positive integers a, a + 1, ..., b (a ≤ b). You want to find the minimum integer l (1 ≤ l ≤ b - a + 1) such that for any integer x (a ≤ x ≤ b - l + 1) among l integers x, x + 1, ..., x + l - 1 there are at least k prime numbers.
Find and print the required minimum l. If no value l meets the described limitations, print -1.
Input
A single line contains three space-separated integers a, b, k (1 ≤ a, b, k ≤ 106; a ≤ b).
Output
In a single line print a single integer — the required minimum l. If there's no solution, print -1.
Sample Input
Input
2 4 2
Output
3
Input
6 13 1
Output
4
Input
1 4 3
Output
-1
/*题意:给出三个正整数a、b、k,求最小的L(1?≤?L≤?b?-?a?+?1)满足对于[a, b-L+1]中的任意一个数X,在[X, X+L-1]这L个数中,至少有k个素数。如果不存在满足条件的L,输出-1.
解题思路:首先判断是否有解,即判断当L=b-a+1时是否有解,因此时L最大,若此时都无解,则肯定无解。
若有解,则1?≤?L≤?b?-?a?+?1,二分求最小的L即可。*/
#include<cstdio>
#include<algorithm>
using namespace std;
int su[1000100]={1,1};
int con[1000100];
void sushudabiao()
{
int i,j;
for(i=2;i<=1000010;i++)
{
if(su[i]==1)
continue;
for(j=2*i;j<=1000010;j+=i)
{
su[j]=1;
}
}
}
void shusu()
{
sushudabiao();
int i;
con[0]=0;
for(i=1;i<=1000010;i++)
{
if(!su[i]){
con[i]=con[i-1]+1;
}
else{
con[i]=con[i-1];
}
}
}
bool panduan(int a,int b,int k,int l)
{
int i,r=b-l+1;
for(i=a;i<=r;i++)
{
if(con[i+l-1]-con[i-1]>=k){
continue;
}
else{
return false;
}
}
return true;
}
int qiumin(int a,int b,int k)
{
int l=1,r=b-a+1;
int mid;
while(l<=r)
{
mid=(l+r)/2;
if(panduan(a,b,k,mid))
r=mid-1;
else
l=mid+1;
}
return l;
}
int main()
{
shusu();
int a,b,k;
while(scanf("%d%d%d",&a,&b,&k)!=EOF)
{
if(!panduan(a,b,k,b-a+1))
printf("-1\n");
else
printf("%d\n",qiumin(a,b,k));
}
return 0;
}