素数距离题目
2016-07-18 14:53
148 查看
好久没有刷题了,于是去南阳理工的oj上从刷入门题,练练手,题目如下:
时间限制:3000 ms | 内存限制:65535 KB
难度:2
描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
样例输出
素数距离问题
时间限制: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
#include <stdio.h> #include <math.h> int isprime(int n) { int flag = 0; for(int j = 2; j <= sqrt(n); j++) { if(n % j == 0) flag = 1; } return flag; } int main() { int N, M, L1, L2=2, f1, f2; scanf("%d",&N); while(N--) { scanf("%d",&M); if(M ==1 ) { printf("%d %d\n", 2, 1); continue; } for(int i = M; i > 1; i--) { if(isprime(i) == 0) { L1 = i; break; } } for(int j = M; ; j++) { if(isprime(j) == 0) { L2 = j; break; } } if(M-L1 > L2-M) printf("%d %d\n", L2, L2-M); else printf("%d %d\n", L1, M-L1); } return 0; }一定要注意输入1的时候,特殊处理 ,这道题通过只有24%,搞不好,很多人就是第一次忘记对1的处理。我也看过该题的最优代码,能写出最优代码的人是对for循环理解的相当透彻的,for(int i=M;isprime(i);i++)for(int j=M;isprime(M);j--).
相关文章推荐
- 学习笔记-斯坦福iOS7-第四课:框架和带属性字符串
- jsp的对象和范围
- java.lang.NullPointerException at android.support.v4.app.FragmentManagerImpl.sav
- [绍棠] iOS开发常用的调试命令
- Visual Studio Code 使用记录
- AFN 网络检测
- 线段树基础详解
- shell中感叹号与引号用法
- RadioButton 多行 多列显示
- HDU 1166 敌兵布阵 (树状数组 || 线段树)
- Java中获取明天或者昨天的日期的方法
- OpenCV 颜色空间转换参数CV_BGR2GRAY改变
- 设计模式之状态模式
- 对浏览器版本的判断
- hdu5720Wool+区间覆盖总长
- 从FineReport看开放式引擎API
- java学习之container
- JSP的隐含对象
- DB2 初试还原联机备份
- 【开源】Time-NLP 中文语句中的时间语义识别