超级素数是指从个位起删除0位、1位、2位……直到只剩最后1位都是素数的十进制正整数。可以自定义一个素数判断函数,对某一正整数n及从个位起每删除1位的新数逐一进行判断,都是素数的则是题解。以下代码先要求输入正整数n,输出2~n之间的所有超级素数:
#include "stdio.h"
int prime(int n){//判断素数,素数返回0,否则返回1
int i;
if(n>2 && !(n&1) || n<2)
return 1;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return 1;
return 0;
}
int main(int argc,char *argv[]){
int n,i,t;
printf("Input n(int n>1)...\nn=");
if(scanf("%d",&n)!=1 || n<2){
printf("Input error, exit...\n");
return 0;
}
for(i=2;i<=n;i++){
for(t=i;t;t/=10)//从低位删除0位,1位...直到只剩1位都是素数的为超级素数
if(prime(t))
break;
if(!t)
printf("%d ",i);
}
printf("\n");
return 0;
}
运行样例如下: