zoukankan      html  css  js  c++  java
  • [暑假集训--数论]poj3518 Prime Gap

    The sequence of n − 1 consecutive composite numbers (positive integers that are not prime and not equal to 1) lying between two successive prime numbers p and p + n is called a prime gap of length n. For example, ‹24, 25, 26, 27, 28› between 23 and 29 is a prime gap of length 6.

    Your mission is to write a program to calculate, for a given positive integer k, the length of the prime gap that contains k. For convenience, the length is considered 0 in case no prime gap contains k.

    Input

    The input is a sequence of lines each of which contains a single positive integer. Each positive integer is greater than 1 and less than or equal to the 100000th prime number, which is 1299709. The end of the input is indicated by a line containing a single zero.

    Output

    The output should be composed of lines each of which contains a single non-negative integer. It is the length of the prime gap that contains the corresponding positive integer in the input if it is a composite number, or 0 otherwise. No other characters should occur in the output.

    Sample Input

    10
    11
    27
    2
    492170
    0

    Sample Output

    4
    0
    6
    0
    114

    给个x,如果x夹在两个质数a,b之间,求b-a,否则输出0

    在筛法的时候预处理下距离就好

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #define LL long long
     5 using namespace std;
     6 inline LL read()
     7 {
     8     LL x=0,f=1;char ch=getchar();
     9     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    10     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    11     return x*f;
    12 }
    13 LL n;
    14 bool mk[2000010];
    15 int p[2000010],len;
    16 int ans[2000010];
    17 inline LL LLabs(LL a){return a<0?-a:a;}
    18 inline void getp()
    19 {
    20     memset(ans,-1,sizeof(ans));
    21     for (int i=2;i<=2000000;i++)
    22     {
    23         if (!mk[i])
    24         {
    25             p[++len]=i;
    26             ans[i]=0;
    27             for (int j=2*i;j<=2000000;j+=i)mk[j]=1;
    28         }else ans[i]=ans[i-1]+1;
    29     }
    30     for (int i=2000000;i>=1;i--)
    31     {
    32         if (!ans[i])continue;
    33         ans[i]=max(ans[i],ans[i+1]);
    34     }
    35 }
    36 int main()
    37 {
    38     getp();
    39     ans[1]=-1;
    40     while (~scanf("%lld",&n)&&n)printf("%d
    ",ans[n]?ans[n]+1:0);
    41 }
    poj 3518
  • 相关阅读:
    vue移动端滚动插件BetterScroll
    vue商品推荐信息展示 案例
    css吸顶效果
    vue TabControl案例
    首页导航栏样式 案例
    HO引擎近况20210713
    go定时器--timer
    go定时器--Ticker
    Go测试--main测试
    Spring 核心技术 AOP 实例
  • 原文地址:https://www.cnblogs.com/zhber/p/7285378.html
Copyright © 2011-2022 走看看