T603776 lucky prime

解题思路

这道题要求我们找出在给定范围 [m, n] 内的所有幸运素数。幸运素数的定义是:

  1. 本身是素数

  2. 每次去掉最低位后仍然是素数,直到只剩下一个一位素数(2, 3, 5, 7)。

关键步骤

  1. 素数判断:编写一个函数 prime(x) 判断 x 是否为素数。

  2. 幸运素数检查:编写一个函数 check(x),检查 x 是否符合幸运素数的定义:

    • 每次去掉最低位(x /= 10),检查剩余部分是否仍然是素数。

    • 直到 x 变成 0(即所有位数都检查完毕)。

  3. 遍历范围:从 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;
}

 

posted @ 2025-05-07 19:57  CRt0729  阅读(26)  评论(0)    收藏  举报