您的位置:首页 > 编程语言 > C语言/C++

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]



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: