超级素数

上机考试的一道题:
一个素数,若依次从低位去掉一位、两位、······若所得各数仍都为素数,则称该数为超级素数。例如:由于239、23、2均为素数,则239为超级素数。求:
[100,9999]之内:
(1)超级素数的个数;
(2)所有的超级素数之和;
(3)最大的超级素数。

代码如下

#include<stdio.h>
f(int n)/*n 是形式参数*/
{
	int z=1;
	int i;
	for(i=2;i<=n-1;i++)
	{
		if(n%i==0)/*n是合数*/
		{
			z=0;
			break;
		}
	}
	return(z);
 } 
int main()
{
	int a,b,c,m;
	int num,sum,max;
	num=0,sum=0,max=0;
	for(m=100;m<=9999;m++)
	{	
	    if(f(m)==1)
	    {
		    a=m/10;/*去除m的个位*/
		    b=m/100;/*去除m的十位和个位*/
		    c=m/1000;/*去除m的百位、十位和个位*/
		    if((m<1000)&&(b!=1)&&(f(a)==1)&&(f(b)==1))/*a,b都是素数*/
		   {
			   num+=1;
		       sum+=m;
	           max=m;
	           printf("第%d个超级素数是%d\n",num,m);
		   }
		   if((m>=1000)&&(c!=1)&&(f(a)==1)&&(f(b)==1)&&(f(c)==1))/*a,b,c都是素数*/
		   {
			    num+=1;
                sum+=m;
	            max=m;
	            printf("第%d个超级素数是%d\n",num,m);
		   }
        }
   }
   printf("[100,9999]之内超级素数的个数为%d\n",num);
   printf("[100,9999]之内超级素数的和为%d\n",sum);
   printf("[100,9999]之内最大的超级素数是%d\n",max);
}

运行结果

1个超级素数是2332个超级素数是2393个超级素数是2934个超级素数是3115个超级素数是3136个超级素数是3177个超级素数是3738个超级素数是3799个超级素数是59310个超级素数是59911个超级素数是71912个超级素数是73313个超级素数是73914个超级素数是79715个超级素数是233316个超级素数是233917个超级素数是239318个超级素数是239919个超级素数是293920个超级素数是311921个超级素数是313722个超级素数是373323个超级素数是373924个超级素数是379325个超级素数是379726个超级素数是593927个超级素数是719328个超级素数是733129个超级素数是733330个超级素数是7393
[100,9999]之内超级素数的个数为30
[100,9999]之内超级素数的和为75548
[100,9999]之内最大的超级素数是7393

--------------------------------
Process exited after 0.1316 seconds with return value 0
请按任意键继续. . .

题目需要注意的事项:
1不是素数;
判断去除某位数后的数是否为素数可以用子函数的结论;
m要区分其是三位数和四位数的情况。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值