C语言编写超级素数

超级素数:一个素数依次从低位去掉一位、两位。。。若所得的书已然是素数,如239就是超级素数。试求100~9999之内:超级素数的个数。... 超级素数:一个素数依次从低位去掉一位、两位。。。若所得的书已然是素数,如239就是超级素数。试求100~9999之内:超级素数的个数。 展开
 我来答
White_MouseYBZ
2017-08-14 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6444万
展开全部

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

运行样例如下:

匿名用户
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环境下可以省去*/
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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);}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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();

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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;}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式