zoukankan      html  css  js  c++  java
  • E题

    题目大意:

    找到一个最小的l值,使得a到b-l+1中任取一个数开始前进l次,中间包含至少有k个素数,如果找不到,返回-1;

    运用素数打表法和2分法便能简单搞定:

    题目链接:http://codeforces.com/problemset/problem/237/C

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 using namespace std;
     6 
     7 #define  N 1000100
     8 int sum[N],pri[N],k,a,b;
     9 void get_prim()
    10 {
    11     int t=(int)sqrt(N+0.5);
    12     for(int i=0;i<N;i++) pri[i]=1;
    13     pri[1]=0;
    14     for(int i=2;i<=t;i++){
    15         for(int j=i+i;j<=N;j+=i)
    16             pri[j]=0;
    17     }
    18 }
    19 
    20 void get_sum()
    21 {
    22     get_prim();
    23     sum[1]=0,sum[2]=1;
    24     for(int i=3;i<N;i++)
    25     {
    26         if(pri[i]) sum[i]=sum[i-1]+1;
    27         else  sum[i]=sum[i-1];
    28     }
    29 }
    30 bool Find(int l)
    31 {
    32     for(int j=a;j<=b-l+1;j++)
    33     {
    34         if((sum[j+l-1]-sum[j-1])<k) return false;
    35     }
    36     return true;
    37 }
    38 
    39 int main()
    40 {
    41     get_sum();
    42     int ans,start,last,mid;
    43     while(scanf("%d%d%d",&a,&b,&k)!=EOF)
    44     {
    45         ans=b+2;
    46         start=a,last=b;
    47         while(start<=last)
    48         {
    49             mid=(start+last)/2;
    50             if(Find(b-mid+1)) ans=mid,start=mid+1;
    51             else last=mid-1;
    52         }
    53         cout<<b-ans+1<<endl;
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    JS事件
    BOM
    DOM
    常见的SQL字符串函数
    常用的认证方式
    后台代码扫描规则-sonarQube官方
    spring cloud中feign的使用
    常见基于 REST API 认证方式
    Java中连接池
    这是一张心情贴
  • 原文地址:https://www.cnblogs.com/CSU3901130321/p/3872001.html
Copyright © 2011-2022 走看看