#include<stdio.h>
#include<math.h>
int prime(int m)
{
int i,k;if(m!=0)
k=(int)sqrt(m);
for ( i = 2; i <=k; i++)
{
if (m%i==0)
break;
}
if(i>k)
return 1;
else
return 0;
}
int super(int u)
{
int a,b,c;
int flag=0;
a=prime(u/1%10);
b=prime(u/10%10);
c=prime(u/100%10);
if(u<8&&a==1)
return 1;
if ((u/10%10)!=0)
{
if(a==0)flag++;if (b==0)flag++;if(c==0)flag++;
if(flag==0)return 1;
else return 0;
}
}
void main()
{
int i,j,m;
for ( i = 2; i <1000; i++)
{
j=prime(i) ;
if (j==1)
{
m=super(i);
if (m==1)
{printf("%4d",i);}
else continue;
}
else continue;
}
}
超级素数的逻辑判断有点问题,修改了下你的代码
#include<stdio.h>
#include<math.h>
int prime(int m) {
int i, k;
if(m != 0)
k = (int)sqrt(m);
for ( i = 2; i <= k; i++) {
if (m % i == 0)
break;
}
if(i > k)
return 1;
else
return 0;
}
int super(int u) {
while(u != 0) {
if(prime(u)) {
u /= 10;
} else {
return 0;
}
}
return 1;
}
int main() {
int n;
printf("请输入n:");
scanf("%d", &n);
if(super(n)) {
printf("yes");
} else {
printf("no");
}
return 0;
}