c语言编程——求100-900间的无暇素数,我写的程序哪里出问题了?求大神指教!在线等!

代码如下,最后输出结果为101 907,想知道为何只输出了两个数,而且最后一个还是907大于九百呢?程序错在哪了呢???
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{
int n,i,k,a,b,c;
for(n=101;n<900;n++)
{
k=(int)sqrt(float(n));
for(i=2;i<=k;i++)

if(n%i==0) break;
if(i==k+1)
{ a=n/100;
b=n/10%10;
c=n%10;
n=c*100+b*10+a;
k=(int)sqrt(float(n));
for(i=2;i<=k;i++)
if(n%i==0) break;
if(i==k+1)
printf("%d\n",n);
}
}
system("pause");
}

首先,是没分清break和continue的区别。这个是只输出两个数的原因。
然后,是输出的n不是原来的数,题主对n做了取逆序数,输出的是逆序数。这个是出现大于900的原因。
最后,题主本身的对遍历条件n做了操作,导致循环本身也有问题。建议题主,先理清逻辑,重写下。追问

嗯确实,刚老师讲课时反应过来。我的循环逻辑没错,错在对n取逆序时,为了省事还用了变量n,换一变量表示再判断逆序是否为素数就好了!问题已解决,多谢!

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-05-08
根据无暇素数的概念: 一个两位整数 A 本身是素数,若将其个位数字与十位数字交换,得到一个新的两位数 B, 而 B 也是素数,我们则称 A 为无暇素数。追问

老哥,你这答非所问啊!

老哥,你这答非所问啊!

相似回答