NYOJ-24-素数距离问题

描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0

输入
第一行给出测试数据组数N(0< N <=10000)
接下来的N行每行有一个整数M(0< M <1000000),

输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。

样例输入
3
6
8
10

样例输出
5 1
7 1
11 1

水题,质数检测问题。

//#include <stdio.h>
//#define _MAX 1000100
//int a[_MAX + 1] = {1, 1}; //1表示不是质数,0表示是质数
//int p[_MAX]; //1-1000100的所有质数
//
//int main(int argc, const char * argv[])
//{
// int N, M;
// scanf("%d", &N);
// int key = 0;
// for (int i = 2; i <= _MAX; i++)
// {
// if (!a[i])
// {
// p[key++] = i;
// }
// for (int j = 0; j < key && i * p[j] <= _MAX; j++)
// {
// a[i * p[j]] = 1;
// if (!(i % p[j])) //i不是质数,终止循环,减少重复的不必要赋值
// {
// break;
// }
// }
// }
// 
// while (N--)
// {
// scanf("%d", &M);
// if (M == 0 || M == 1)
// {
// printf("2 %d\n", 2 - M);
// }
// else if (M <= 1000000)
// {
// if (!a[M])
// {
// printf("%d 0\n", M);
// }
// else
// {
// int A = 0, B = 0;
// for (int i = M - 1; i > 0; i--)
// {
// if (!a[i])
// {
// A = i;
// break;
// }
// }
// for (int j = M + 1; j <= 1000100; j++)
// {
// if (!a[j])
// {
// B = j;
// break;
// }
// }
// if (M - A > B - M)
// {
// printf("%d %d\n", B, B - M);
// }
// else
// {
// printf("%d %d\n", A, M - A);
// }
// }
// }
// }
// return 0;
//}

还有一种更好的AC代码。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int table[1001000] = {1, 1};    //1非质数0质数

int main()
{
    for (int i = 4; i < 1001000; i += 2)
    {
        table[i] = 1;
    }
    for (int i = 3; i <= 1001; i += 2)
    {
        if (!table[i])
        {
            for (int j = i * i; j < 1001000; j += 2 * i)
            {
                table[j] = 1;
            }
        }
    }

    int t, x;
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d", &x);
        for (int i = 0; ; i++)
        {
            if (!table[x - i] && x > i)
            {
                printf("%d %d\n", x - i, i);
                break;
            } else if (!table[x + i])
            {
                printf("%d %d\n", x + i, i);
                break;
            }
        }
    }
    return 0;
}

哦啦!!!

你可能感兴趣的:(质数检测)