#include <stdio.h>
void main()
{
int i,j,k,m,n;
for(i=100;i<=9999;i++)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if(j==i)
{if(i<=999)
{ for(k=0;k<3;k++)
{ m=i ;
m=m/10;
for(n=2;n<m;n++)
if(m%n==0)
break;}
if(n==m)
printf("%d\t",i);
}
if(i>999)
{ for(k=0;k<4;k++)
{m=i;
m=m/10;
for(n=2;n<m;n++)
if(m%n==0)
break;}
if(n==m)
printf("%d\t",i);}
}
}
}请问这个函数哪里错了?
逻辑乱得有点厉害,如
for(n=2;n<m;n++)这里的break;只结束for(n=2;...这个循环,还在前一个for(k=0;k<3;k++)循环中;可是break;就意味着m已经不是素数了,那么整个m所在的3位数就不是超级素数,还有什么必要继续做for(k=0;k<3;k++)这个循环?这种题比较好的结构是弄一个素数判断函数,不断用原数和它不断除以10的数调用,都返回“真”的就是超级素数,否则不是。代码如下——
#include "stdio.h"运行结果:
你的求超级素数的C语言程序,我帮你改好了,你看看吧,运行结果没有问题(因为运行结果太长,我就不在这里贴出来了,你自己运行一下就行了.)
#include <stdio.h>