zcmu 1022 Primes on Interval(线性筛+二分)

【题目】

1022: Primes on Interval

【题意】

给出整数a,b ,k,a,b代表[a,b]区间,求出最小的长度l,使得[a,b]区间内任何一个长度为l的连续区间中素数的数量>=k.

【思路】

用线性筛法筛出[1,1e6]中的素数,用一个数组cou[i]记录1到i的素数数目,便于进行某个区间素数数目的计算。由于答案具有单调性,考虑用二分判断并输出最小长度l。

【代码】

#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#define mem(a) memset(a,0,sizeof(a)) 
#define go(i,a,b) for(int i=a;i<=b;i++) 
#define og(i,a,b) for(int i=a;i>=b;i--) 
using namespace std; 
const int N=1e6; 
const int inf=0x3f3f3f3f; 
typedef long long ll; 
typedef unsigned long long ull; 
bool num[N+5]; 
int prime[N+5],cou[N+5]; 
int a,b,k; 
void isprime() 
{ 
    memset(num,true,sizeof(num)); 
    num[1]=false; int c=0; 
    for(int i=2;i<=N;i++) 
    { 
        if(num[i]) prime[c++]=i; 
        for(int j=0;j

 

你可能感兴趣的:(zcmu 1022 Primes on Interval(线性筛+二分))