c语言之素数距离问题

来源:互联网 发布:java中printf格式化输 编辑:程序博客网 时间:2024/05/21 05:57

素数距离问题

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


0 0
原创粉丝点击