幸运素数

题目描述

素数,又称质数,是指除 11 和其自身之外,没有其他约数的正整数。例如 2,3,5,132,3,5,13 都是素数,而 4,9,12,184,9,12,18 则不是。特别地,规定 11 不是素数(因此自然数的质因数分解就是唯一的)。

如果一个数本身是素数,并且把最低位删除后得到的数仍是素数、再把最低位删除后得到的数仍是素数……如此往复,直到得到一个一位素数,我们就称它是“幸运素数”。以 233233 为例:

  • 233233 本身是素数;
  • 23=⌊23310⌋23=⌊10233​⌋ 是素数;
  • 2=⌊2310⌋2=⌊1023​⌋ 是素数。

因此 233233 是“幸运”素数。而 211211 则不是幸运素数:虽然 211211 是素数,但 2121 不是素数。请编程求出一定范围内的所有幸运数字。

输入格式

输入一行两个用空格分隔的正整数 m,n,表示我们希望求幸运素数的范围。

输出格式

从小到大输出 m,m+1,m+2,⋯,n 中所有的幸运素数,每行输出一个。

输入输出样例

输入 #1

6 30

输出 #1

7
23
29

说明/提示

对于 100%100% 的测试数据,有 1≤m≤n≤99991≤m≤n≤9999。

本题原始满分为 15pts

15pts。

 

/*
对此题需要:
   1.素数的判断
   2.一个数删除最后一位判断
*/
#include<stdio.h>

int sushu(int n){   //判断素数
	if(n <= 1) return 0;
	else if(n == 2) return 1;
	else 
	{
		for(int i = 2;i < n;i++){
			if(n%i == 0) return 0;
		}
		return 1;
	}
}

int main(){
	int m,n;
	int flag = 1; 
	scanf("%d %d",&m,&n);
	for(int j=m;j<=n;j++){
		int i = j;   //因要删除操作 先保留原数
		flag = 1;  //假设这个数满足要求 且每次判断刷新标记
		while(i!=0){    //先判断再删除
			if(sushu(i) == 0) flag = 0;  //只要有一个数不是素数标记为0
			i=i/10;
		}
		if(flag == 1){
			printf("%d\n",j);  //输出
		}
	}
	return 0;
} 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值