CF 237C (质数区间)
2012-10-26 01:56
169 查看
给定区间[a,b] 求l的最小值使[a,b]中任意长度为l的一段包含至少k个Prime
二分l
二分l
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<functional> #include<iostream> using namespace std; #define MAXN (1000000+10) int a[MAXN],tot=0,x,y,k; bool b[MAXN]={0}; void work() { b[1]=1; for (int i=2;i<=y;i++) { if (!b[i]) { tot++; a[tot]=i; } for (int j=1;j<=tot;j++) { if (a[j]*i>y) break; b[a[j]*i]=1; if (!i%a[j]) break; } } } bool is_ok(int l) { int tot=0; for (int i=x;i<=x+l-1;i++) if (!b[i]) tot++; if (tot<k) return false; for (int j=x+l;j<=y;j++) { tot=tot+(!b[j])-(!b[j-l]); if (tot<k) return false; } return true; } int main() { scanf("%d%d%d",&x,&y,&k); work(); int l=k,r=y-x+1; if (l>r||!is_ok(r)) { printf("-1\n"); return 0; } for (int i=1;i<=60;i++) { if (l==r) break; int m=(l+r)>>1; // if (r-l==1) m++; if (is_ok(m)) r=m; else l=m+1; } printf("%d\n",l); // while (1); return 0; }
相关文章推荐
- hdoj 1695 GCD 【容斥原理 + 欧拉函数】 【求两个区间里面的所有不重复质数对】
- 开区间[L, R]中的整数L,R;在此区间中所有质数的个数n
- HDU 4632 CF 245H 区间DP(回文)
- cf- 297 < b > -- 区间翻转操作的优化
- 打印某一区间的素数(质数)
- CF 244 C. The Brand New Function 思维(二进制,区间或运算不同结果)
- CF 149D - Coloring Brackets(区间Dp)
- CF 46D Parking Lot(区间合并)
- CF-E. Holes(区间分块,二分思想)
- 数论专题 区间质数数量
- CF 337A Puzzle 【区间枚举】
- CF301D(树状数组,离线统计,区间求和)
- CF-E. Holes(区间分块,二分思想)
- CF 467C - George and Job (简单区间DP)
- cf 484b 二分搜索/区间最值
- HDU5317求连续区间类每个数的质因数种类数,每个合数都能它前面的质数相乘得到
- CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)
- cf 教育场4 ,区间交集个数
- POJ 2689 区间筛选质数
- CF 279C Ladder(区间问题)