C语言编写超级素数

超级素数:一个素数依次从低位去掉一位、两位。。。若所得的书已然是素数,如239就是超级素数。试求100~9999之内:超级素数的个数。

超级素数是指从个位起删除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;
}

运行样例如下:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-09
编写自定义函数prime(int x),判断x是否为素数。利用此函数编写程序分别找
出1~5000中满足下列条件的数x:
(1)x是素数。
(2)x的各位数字及x本身都是素数。
(3)x是素数,从个位开始依次去掉一位数后的数仍然是素数。例如,233是素数,23和2仍然是素数,则233
满足条件。
#include<stdio.h>
int prime(int x)
{
int i,j=1;
if(x==0||x==1)j=0;
else
for(i=2;i<x;i++)
{
if(x%i==0)
{
j=0;
break;
}
}
return j;
} int css(int x) /*定义一个函数判断一个数是否它本身和各位数都是素数*/
{
if(x<10)
{
if(prime(x)==1)return 1;else return 0;
}
else if(x<100)
{
if(prime(x)==1&&prime(x%10)==1&&prime(x/10)==1)return 1;else return 0;
}
else if(x<1000)
{
if(prime(x)==1&&prime(x%10)==1&&prime(x/10%10)==1&&prime(x/100)==1)
return 1; else return 0;
}
else if(x<10000)
{
if(prime(x)==1&&prime(x%10)==1&&prime(x/10%10)==1&&prime(x/100%10)==1&&prime(x/1000)==1)
return 1; else return 0;
}
}
int jss(int x) /*此函数凑数一个数是否它本身为素数且从个位开始依次去掉一位数字后仍为素数*/
{
if(x<10)
{
if(prime(x)==1)return 1;else return 0;
}
else if(x<100)
{
if(prime(x)==1&&prime(x/10)==1)return 1;else return 0;
}
else if(x<1000)
{
if(prime(x)==1&&prime(x/10)==1&&prime(x/100)==1)return 1;
else return 0;
}
else if(x<10000)
{
if(prime(x)==1&&prime(x/10)==1&&prime(x/100)==1&&prime(x/1000)==1)
return 1; else return 0;
}
} void main(){
int i,count=0; printf("di (1) ti de jie guo:\n");
for(i=1;i<=5000;i++) /*(1)x是素数*/
{
if(prime(i)==1)
{
count++;printf("%5d",i);if(count%10==0)printf("\n");
}
} printf("\ndi (2) ti de jie guo:\n");
count=0; /*计数清0*/
for(i=1;i<=5000;i++) /*(2)x的各位数字及x本身都是素数*/
{
if(css(i)==1)
{
count++;printf("%5d",i);if(count%10==0)printf("\n");
}
} printf("\ndi (3) ti de jie guo:\n");
count=0; /*计数清零*/
for(i=1;i<=5000;i++) /*(3)x是素数,从个位开始依次去掉一位数字后的数仍为素数*/
{
if(jss(i)==1)
{
count++;printf("%5d",i); if(count%10==0)printf("\n");
}
}getch(); /*这条语句在vc环境下可以省去*/
}
第2个回答  2013-07-09
#include<stdio.h>
main( )
{ int i,j,n=0,t,f=0;
for(t=100;t<10000;t++)
{
i=t;
f=1;
while(i!=0)
{
for(j=2;j<i;j++)
if(i%j==0) break;
if(j!=i){f=0;break;}
i/=10;
}
if(f==1){printf("%5d",t);n++;}
}
printf("\nn=%d\n",n);}本回答被网友采纳
第3个回答  2013-07-09
#include "windows.h"
#include"stdio.h"
main()
{
int n,i,a;
for(n=100;n<9999;n++)
{
a=n;
while(a>0)
{
for(i=2;i<a;i++)
{
if(a%i==0) break;
}
if(i!=a) break;
a=a/10;
}
if(a==0) printf("%-4d ",n);

}
getchar();

}
第4个回答  2013-07-09
#include<stdio.h>int prime(int n){ int i = 0; for (i = 2; i * i <= n; i++) { if (n % i == 0) { break; } } if (i * i > n) { return 1; } else { return 0; } } int main(){ int i = 0; for (i = 2; i <= 1000; i++) { if (prime(i)==1) { printf("%d ",i); } } return 0;}