如果两个素数之差为2, 称它们是一对孪生素数。要求素数判定用函数完成, 函数prime(int k) 判断k是否为素数。
例:输入:1 10 输出:[3,5] [5,7]
输入:10 20 输出:[11,13] [17,19]
以下是我写的,有问题
#include<stdio.h>
#include<math.h>
int prime(int k)
{int j;
double m;
int s=1;
m=sqrt(k);
for(j=2;j<=m;j++)
{if(k%j==0)
{s=0;
break;}
if(s)
{m=sqrt(k+2);
for(j=2;j<=m;j++)
{if((k+2)%j==0)
{s = 0;
break;}
if(s)
{printf("[%d,%d]",k,k+2);
return 0;}
}
}
}
}
int main()
{ int a,b,i;
scanf("%d%d",&a,&b);
for(i=a;i+2<b;i++)
prime(i+1);
}
好像没有办法使s为0,结束这个循环,那个break只能跳出一层,导致s=1,输出了a到b之间的所有相隔距离为2 的数对。比如1 10,会输出[11,13] [15,17] [17,19]
怎么改呀
下面错了会输出[5,7] [7,9].应该输出[3,5] [5,7]才对
还是不行啊
追答可能是你的姿势不对:-(
照片上我看到一片星星点点。你就不能拍得大一点,充分利用屏幕的像素吗?
你的代码我也没看见。肯定是代码有点问题啦。
要把代码复制上来才可以看清楚啊。
我刚刚又查了一遍代码,我发现我的跟你不一样在于for之后有无{ },
for(j=2;j<=m;j++)
{if(k%j==0)
{s=0;
break;}
我把这个for之后的放在一个{}里了,导致程序有问题
按你的输出是正确的