csu1030: 素数槽

来源:互联网 发布:unity3d 海底光影 编辑:程序博客网 时间:2024/05/29 08:45

1030: 素数槽

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 463  Solved: 154
[Submit][Status][Web Board]

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的素数槽的长度,每个非负整数占一行。

Sample Input

51011272492170

Sample Output

4060114

HINT

Source

中南大学第三届大学生程序设计竞赛




分析:

水题。刚好被问到这个题就写一下了。打表+线性筛选。

ac代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#define MAXN 1300000
bool is_p[MAXN];


void calc()
{
    for( int i = 1; i < MAXN; i ++)
        is_p[i] = true;
    is_p[1] = false;
    for( int i = 2; i < MAXN; i ++)
    {
        if( !is_p[i]) continue;
        for( int j = 2; i * j < MAXN; j ++)
            is_p[i * j] = false;
    }
}


int main()
{
    int n, k, cnt;
    calc();
    scanf( "%d", &n);
    while( n --)
    {
        scanf( "%d", &k);
        cnt = 0;
        for( int i = k; !is_p[i]; i ++)
            cnt ++;
        for( int i = k; !is_p[i]; i --)
            cnt ++;
        printf( "%d\n", cnt);
    }
    return 0;
}


0 0
原创粉丝点击