给你个完整的:
#include<stdio.h>int isprim(int n)
{
int i
if (n<2) return 0
for (i=2 i*i<=n ++i)
if (n%i==0) return 0
return 1
}
int isssp(int n)
{
if (!isprim(n)) return 0
while (n/10)
if (!isprim(n/=10)) return 0
return 1
}
int main()
{
int i
int cnt=0
int maxp
for (i=100 i<10000 ++i)
{
if (isssp(i))
{
++cnt
maxp=i
printf("%8d", i)
if (cnt%5==0)
printf("\n")
}
}
printf("\n总共有:%d个\n", cnt)
printf("最大的是:%d\n", maxp)
return 0
}
超级素数是指从个位起删除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=3i*i<=ni+=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=2i<=ni++){
for(t=itt/=10)//从低位删除0位,1位...直到只剩1位都是素数的为超级素数
if(prime(t))
break
if(!t)
printf("%d ",i)
}
printf("\n")
return 0
}
运行样例如下:
一个素数,依次从最高位去掉一位,两位……若得到的都是素数,且各数字不为0,则称为超级素数。 /*TC2.0调试*/ #include "stdio.h" #include "math.h" int prime(int i){/*判断是否为素数*/ int j if(i==1) return 0 for(j=2j<=sqrt(i)j++) if(i%j==0) return 0 return 1 } int IsSuperPrime(int i){/*判断此数是否为超级素数函数*/ int j if(prime(i)==1){ do{ i=i/10 if(prime(i)==0) return 0 } while(i>=10) return 1 } else return 0 } void main()/*求100~9999之间所有的超级素数个数,和,及最大值*/ { int i,spn=0,spm long sps=0 for(i=101i<=9997i+=2) if(IsSuperPrime(i)==1){ sps+=i spn++ spm=i } printf("sum=%ld,Total=%d,Max=%d",sps,spn,spm) getch() }记得采纳啊