题目描述
素数,又称质数,是指除 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;
}