NYOJ 24 素数距离问题

来源:互联网 发布:centos 7 更改ftp目录 编辑:程序博客网 时间:2024/06/06 07:08

素数距离问题(GO QUESTION)

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
36810
样例输出
5 17 111 1
来源
经典题目

感想:很坑人的题目,挂了两次。注意特殊情况。

可能就是自己做题少的缘故(做题确实少)。

注意,输的排序是从右到左,意思就是左边的数>右边的数。


代码:

/*=============================AC情况===============================*//*题目网址:/*时间:/*心得:  */#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define MYDD 1000005int isss[MYDD];void init() {memset(isss,1,sizeof(isss));isss[0]=isss[1]=0;isss[2]=1;for(int j=2; j<MYDD; j++) {if(isss[j]) {for(int i=j*2; i<MYDD; i=i+j)isss[i]=0;}}}int main() {int N,M,A,B,j,k;int zuo,you;scanf("%d",&N);init();while(N--) {scanf("%d",&M);if(isss[M])printf("%d 0\n",M);else {for(j=M+1; j<MYDD; j++) {//向数轴右边寻找下一个素数if(isss[j]) {you=j-M;break;}}for(k=M-1; k>=2; k--) {//向数轴左边寻找上一个素数if(isss[k]) {zuo=M-k;break;}}if(zuo>you) {A=j;B=you;} else {A=k;B=zuo;}printf("%d %d\n",A,B);}}return 0;}

0 0
原创粉丝点击