Codeforces 237C Primes on Interval 【二分】
2016-04-28 17:34
316 查看
题目链接:Codeforces 237C Primes on Interval
C. Primes on Interval
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard 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’s no solution, print -1.
Examples
input
2 4 2
output
3
input
6 13 1
output
4
input
1 4 3
output
-1
题意:让你找到最小的l满足1 <= l <= b - a + 1,使得对于任意的x(a <= x <= b - l + 1)均有[x, x + l - 1]里面至少有k个质数。
思路:推敲下,会发现l是单调的,那么直接二分就好了。
AC代码:
C. Primes on Interval
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard 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’s no solution, print -1.
Examples
input
2 4 2
output
3
input
6 13 1
output
4
input
1 4 3
output
-1
题意:让你找到最小的l满足1 <= l <= b - a + 1,使得对于任意的x(a <= x <= b - l + 1)均有[x, x + l - 1]里面至少有k个质数。
思路:推敲下,会发现l是单调的,那么直接二分就好了。
AC代码:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <map> #include <set> #include <string> #include <queue> #define CLR(a, b) memset(a, (b), sizeof(a)) #define fi first #define se second using namespace std; typedef long long LL; typedef pair<int, int> pii; const int MAXN = 1e6 + 1; const int MOD = 1073741824; const int INF = 0x3f3f3f3f; void add(LL &x, LL y) { x += y; x %= MOD; } bool vis[MAXN]; int sum[MAXN]; void getvis() { vis[1] = true; for(int i = 2; i < MAXN; i++) { if(vis[i]) continue; for(int j = 2*i; j < MAXN; j += i) { vis[j] = true; } } sum[0] = 0; for(int i = 1; i < MAXN; i++) { sum[i] = sum[i-1] + (vis[i] == false); } } bool judge(int o, int a, int b, int k) { for(int i = a; i <= b - o + 1; i++) { if(sum[i+o-1] - sum[i-1] < k) return false; } return true; } int main() { getvis(); int a, b, k; while(scanf("%d%d%d", &a, &b, &k) != EOF) { int l = 1, r = b - a + 1; int ans = -1; while(r >= l) { int mid = (l + r) >> 1; if(judge(mid, a, b, k)) { ans = mid; r = mid - 1; } else { l = mid + 1; } } printf("%d\n", ans); } return 0; }
相关文章推荐
- Git放弃本地所有修改,强制更新
- 个推消息推送
- 3.表达式
- 模板-求组合数
- mysql的执行顺序
- android 读取手机通讯录并显示listview
- OpenCV学习笔记_直方图均衡化cvEqualizeHist
- JavaBean和EJB的区别
- 图论问题--求哈密尔顿回路的问题
- 二进制转化
- 关于java的递归写法,经典的Fibonacci数的问题
- 《ArcGIS Runtime SDK for Android开发笔记》——(13)、图层扩展方式加载Google地图
- CodeSmith和PowerDesigner的使用安装和数据库创建(原创系列教程)
- 小木的智慧屋--微信公众号的推广案例分析(1)
- NIO java
- 委托中的协变和逆变(C# 编程指南)
- Codeforces 237B Young Table 【构造】
- 机器学习算法----贝叶斯网络
- Unity3D 动态创建Mesh
- sqlite3中 timestamp使用