NYOJ 24 素数距离问题
2016-07-17 22:10
330 查看
素数距离问题(GO QUESTION)
时间限制:3000 ms | 内存限制:65535 KB难度:2
描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3 6 8 10
样例输出
5 1 7 1 11 1
来源
经典题目
感想:很坑人的题目,挂了两次。注意特殊情况。
可能就是自己做题少的缘故(做题确实少)。
注意,输的排序是从右到左,意思就是左边的数>右边的数。
代码:
/*=============================AC情况===============================*/ /*题目网址: /*时间: /*心得: */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define MYDD 1000005 int 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; }
相关文章推荐
- Python中的编码(encode)与解码(decode)
- 代码故事:汉德的救赎
- JAVA学习总结二十五
- sublime 2221
- 从零开始学_JavaScript_系列(24)——查看对象属性,合并数组
- how to iterate each tableview cells
- 代码故事:汉德的救赎
- 如何在 Linux 上录制你的终端操作
- fibonacci 通项式
- GSON的使用介绍
- ccnu_2016_summer_week1(1)
- Vue.jsbrowserify项目模板
- android button的使用
- 建立java环境
- 342. Power of Four
- 可汗学院公开课:统计学
- 字符流中第一个不重复的字符 java
- HBase数据导入方法总结(续)
- python matplotlib绘图设置坐标轴刻度、文本
- leetcode--ksum问题--3sum