zoukankan      html  css  js  c++  java
  • CSU1030素数槽

    Description

           处于相邻的两个素数pp + n之间的n - 1个连续的合数所组成的序列我们将其称为长度为n的素数槽。例如,‹24, 25, 26, 27, 28›是处于素数23和素数29之间的一个长度为6的素数槽。

           你的任务就是写一个程序来计算包含整数k的素数槽的长度。如果k本身就是素数,那么认为包含k的素数槽的长度为0。

    Input

    第一行是一个数字n,表示需要测试的数据的个数。后面有n行,每行是一个正整数kk大于1并且小于或等于的第十万个素数(也就是1299709)。

    Output

    对于输入部分输入的每一个k,都对应输出一个非负整数,表示包含k的素数槽的长度,每个非负整数占一行。

    这题目最需要注意的是不能超时,所以需要用到素数打表法来进行符合条件的素数位置,在通过下标相减得到最后的结果

    代码如下:

     1 #include <iostream>
     2 #include<stdio.h>
     3 #include<cstring>
     4 #include<cmath>
     5 using namespace std;
     6 
     7 #define MAXN 1300000
     8 int p[MAXN];
     9 
    10 void getPrim()
    11 {
    12     memset(p,1,sizeof(p));
    13     int n = (int)(sqrt(MAXN+0.5));
    14     for(int i=2;i<=n;i++){
    15         for(int j=i+i;j<=MAXN;j+=i) p[j]=0;
    16     }
    17 }
    18 int main()
    19 {
    20     int T,k;
    21     cin>>T;
    22     getPrim();
    23     while(T--){
    24        cin>>k;
    25 
    26        int top=k,floor=k;
    27        while(p[top]==0) top++;
    28        while(p[floor]==0) floor--;
    29        cout<<top-floor<<endl;
    30 
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    LCT
    Knights0.
    Beautiful Sequence
    Mole and Abandoned Mine
    防御准备
    最小生成树计数
    Miners
    朝暮(枚举基准 容斥)
    Dynamic Rankings(整体二分)
    BZOJ 3875 Ahoi2014 骑士游戏
  • 原文地址:https://www.cnblogs.com/CSU3901130321/p/3861736.html
Copyright © 2011-2022 走看看