T603776 lucky prime
解题思路
这道题要求我们找出在给定范围 [m, n] 内的所有幸运素数。幸运素数的定义是:
-
本身是素数;
-
每次去掉最低位后仍然是素数,直到只剩下一个一位素数(2, 3, 5, 7)。
关键步骤
-
素数判断:编写一个函数
prime(x)判断x是否为素数。 -
幸运素数检查:编写一个函数
check(x),检查x是否符合幸运素数的定义:-
每次去掉最低位(
x /= 10),检查剩余部分是否仍然是素数。 -
直到
x变成 0(即所有位数都检查完毕)。
-
-
遍历范围:从
m到n遍历所有整数,使用check(x)判断是否为幸运素数,如果是则输出。
#include<bits/stdc++.h> using namespace std; /** * 判断一个数是否是素数 * @param x 要判断的数 * @return true 如果是素数,false 如果不是 */ bool prime(int x) { if (x == 1 || x == 0) return 0; // 0 和 1 不是素数 for (int i = 2; i <= sqrt(x); i++) // 只需检查到 sqrt(x) 即可 if (x % i == 0) // 如果能被整除,说明不是素数 return 0; return 1; // 否则是素数 } /** * 检查一个数是否是幸运素数 * @param x 要检查的数 * @return true 如果是幸运素数,false 如果不是 */ bool check(int x) { while (x != 0) { // 不断去掉最低位,直到 x 变成 0 if (prime(x) != 1) // 如果当前 x 不是素数,直接返回 false return 0; x /= 10; // 去掉最低位 } return 1; // 所有位数都符合条件,返回 true } int main() { int n, m; cin >> n >> m; // 输入范围 [m, n] // 遍历范围内的所有数 for (int i = n; i <= m; i++) { if (check(i)) // 如果是幸运素数,输出 cout << i << endl; } return 0; }

浙公网安备 33010602011771号