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;
}

哦啦!!!

全部评论

相关推荐

一天代码十万三:实习东西太少了,而且体现不出你业务,3个月不可能就这点产出吧,建议实习多写点,玩具项目面试官都不感兴趣的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14116次浏览 183人参与
# 面试被问“你的缺点是什么?”怎么答 #
6486次浏览 100人参与
# 水滴春招 #
16621次浏览 361人参与
# 入职第四天,心情怎么样 #
11356次浏览 63人参与
# 租房找室友 #
8060次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26200次浏览 356人参与
# 职场新人生存指南 #
199308次浏览 5519人参与
# 参加完秋招的机械人,还参加春招吗? #
27030次浏览 276人参与
# 文科生还参加今年的春招吗 #
4122次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48639次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144724次浏览 829人参与
# 如果重来一次你还会读研吗 #
155733次浏览 1706人参与
# 机械人选offer,最看重什么? #
69078次浏览 449人参与
# 选择和努力,哪个更重要? #
44330次浏览 494人参与
# 如果再来一次,你还会学硬件吗 #
103653次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20529次浏览 414人参与
# 招聘要求与实际实习内容不符怎么办 #
46804次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4654次浏览 27人参与
# 你们的毕业论文什么进度了 #
901330次浏览 8961人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81380次浏览 496人参与
# 国企还是互联网,你怎么选? #
109200次浏览 853人参与
牛客网
牛客企业服务