c语言之素数距离问题
2015-11-21 22:11
274 查看
素数距离问题
时间限制: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
我的思路比较简单,先对输入元素进行判断是不是素数,如果是,直接输出,否则对将该元素分别从两边找,找到第一个比他小的是素数的元素求两个数之间的距离d1,同理找到第一个比他大的是素数的元素求两个数之间的距离d2,如果d1 <= d2,则小的即为所求,否则大的即为所有,我的机子上编译通过了,但是官网显示的出现了WA,各位大神求解?!?
代码如下:
#include<stdio.h> #include<math.h> int IsPrime(int num) { int i=0; int n;//n为0,不是素数,n为1,是素数 if(num == 1) n = 0; else if(num == 2) n = 1; else if(num % 2 !=0) { n = 1; for(i=3;i<=sqrt(num);i++) { if(num % i == 0) { n = 0; break; } } } else n = 0; return n; } int main() { int num; int n,m; int d1,d2; int count,i; scanf("%d",&count); for(i=0;i<count;i++) { scanf("%d",&num); if(IsPrime(num)) printf("%d\n",num); else { n = m = num; while(m>=2 && IsPrime(m)!=1)//往小的方向找 m--; d1 = num - m; while(IsPrime(n)!=1)//往大的方向找 n++; d2 = n - num; if(d1 <= d2) printf("%d %d\n",m,d1); else printf("%d %d\n",n,d2); } } return 0; }
[/code]
相关文章推荐
- C语言中static关键字的神奇之处
- 杨氏矩阵中查找元素
- 《算法竞赛入门经典2ndEdition 》例题3-2 WERTYU(WERTYU, Uva10082)
- 【总结】C语言中常见的内存操作函数汇总
- hdu 2918 Tobo or not Tobo(IDA*算法)
- C++中的lambda表达式详解
- 003--VS2013 C++ 多边形绘制
- C语言实现密码的设置及验证
- 《算法竞赛入门经典2ndEdition 》例题3-1 TeX中的引号(Tex Quotes, Uva 272)
- C语言指针和数组的关系
- POJ 1107 W's Cipher
- C语言重要常用知识点梳理
- 我的Bit路-C语言实现顺序
- C++程序员必须知道的5大内存区域
- C语言实现顺序表
- KMP-快速模式匹配算法
- c语言符号常量与常变量的区别?
- c语言输出4*5的数列?
- c语言 变量的存储类别以及对应的内存分配?
- c语言编译执行过程