codeforces 237C. Primes on Interval(二分)
2016-10-23 14:17
344 查看
C. Primes on Interval
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
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'
4000
s no solution, print -1.
Examples
input
output
input
output
input
output
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
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'
4000
s no solution, print -1.
Examples
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<cstring> #include<algorithm> using namespace std; const int maxn = 1e6 + 10; int preim[maxn],cnt[maxn]; bool vis[maxn]; void get_prime() { memset(vis,false,sizeof(vis)); vis[0] = true; vis[1] = true; for(int i = 2; i <= maxn; i++) { if(vis[i] == true) continue; for(int j = 2 * i; j <= maxn; j += i) vis[j] = true; } cnt[0] = 0; for(int i = 1; i <= 1000000; i++) { if(vis[i] == false) cnt[i] = cnt[i-1] + 1; else cnt[i] = cnt[i-1]; } } bool judge(int x,int y,int k,int l) { int r = y - l + 1; for(int i = x; i <= r; ++i) { if(cnt[i+l-1] - cnt[i-1] >= k) continue; else return false; } return true; } int get_ans(int a,int b,int k) { int L = 1, R = b - a + 1, mid; while(L <= R) { mid = (L + R) / 2; if(judge(a,b,k,mid)) R = mid - 1; else L = mid + 1; } return L; } int main() { get_prime(); int a,b,k; while(~scanf("%d%d%d",&a,&b,&k)) { if(!judge(a,b,k,b - a + 1)) printf("-1\n"); else printf("%d\n",get_ans(a,b,k)); } return 0; }
相关文章推荐
- Codeforces 237C (Primes on Interval)二分
- 【CodeForces】237C - Primes on Interval(二分)
- CodeForces 237C Primes on Interval(数学加二分)
- Codeforces 237C:Primes on Interval(素数打表+二分)
- Codeforces--237C--Primes on Interval(二分水题)
- CodeForce 237C Primes on Interval(二分+ 素数筛法)
- 【Codeforcdes 237C. Primes on Interval】+ 二分
- Codeforces 237C Primes on Interval(素数统计)
- CodeForces-237C- Primes on Interval
- codeforces 237C.Primes on Interval
- CodeForces 237C Primes on Interval
- CodeForces 237C Primes on Interval
- CodeForces 237C Primes on Interval
- Primes on Interval(素数打表+二分)
- Primes on Interval 【打表+二分】
- codeforces 237-C. Primes on Interval(尺取)
- Primes on Interval(二分 + 素数打表)
- codeforces 237c-Primes on Interva
- 【 Codeforces 237C Primes on Interval】+ 二分
- codeforces 237 C. Primes on Interval