2301_80372041 2023-12-26 17:05 采纳率: 100%
浏览 74
已结题

超级素数,求解答,。123

R7-1 超级素数
分数 11
作者 刘昆
单位 中国矿业大学徐海学院
Background
Special for beginners, ^_^

Description
一个素数如果从个位开始,依次去掉一位数字、两位数字、三位数字……直到只剩下一个数字,中间所有剩下的数都是素数,则该素数为一个超级素数。

例如:2333 是一个超级素数,因为 2333,233,23,2 都是素数。

请写一个程序,给定一个整数 x,求大小不超过 x 的所有超级素数。

Format
Input
一行,给出一个整数 x (1≤x≤10
1010101010101010
)

Output
第一行,一个整数 k,表示 x 以内超级素数的个数。接下来一行 k 个整数,输出所有 x 以内的超级素数,这些数按从小到大的顺序排列。

Samples
样例输入1
100
样例输出1
13
2 3 5 7 23 29 31 37 53 59 71 73 79
Limitation
1s, 1024KiB for each test case.

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
C (gcc)

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-26 18:16
    关注

    【以下回答由 GPT 生成】

    #include <stdio.h>
    #include <stdbool.h>
    
    bool is_prime(int n) {
        if (n <= 1) {
            return false;
        }
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
    
    int is_super_prime(int n) {
        if (!is_prime(n)) {
            return 0;
        }
        int temp = n;
        while (temp > 0) {
            if (!is_prime(temp)) {
                return 0;
            }
            temp /= 10;
        }
        return n;
    }
    
    int main() {
        int x;
        scanf("%d", &x);
        int k = 0;
        for (int i = 2; i <= x; i++) {
            if (is_super_prime(i)) {
                k++;
            }
        }
        printf("%d\n", k);
        for (int i = 2; i <= x; i++) {
            if (is_super_prime(i)) {
                printf("%d ", i);
            }
        }
        return 0;
    }
    

    这个C语言程序可以求解小于等于x的所有超级素数。程序首先定义了两个函数,is_prime()用来判断一个数是否是素数,is_super_prime()用来判断一个数是否是超级素数。然后在main()函数中,通过循环遍历所有小于等于x的数,找出所有的超级素数并输出。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月8日
  • 已采纳回答 12月31日
  • 创建了问题 12月26日