寻找n以内符合特定条件的素数。各位之和依然为素数的数

img


【问题描述】寻找n以内符合特定条件的素数。各位之和依然为素数的数
【输入形式】一个大于1的正整数n
【输出形式】2-n之间所有满足条件的数,两数之间以一个空格分割
【样例输入】10
【样例输出】2 3 5 7
这该怎么写啊😭,图片是我自己写的,不知道哪里错了,求解答,蟹蟹💕

喜欢的话请采纳我,这样我才有动力继续回答

#include <stdio.h>
#include <stdlib.h>

/* 判断一个数是否为素数 */
int is_prime(int n) {
    if (n <= 1) {
        return 0;
    }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}

/* 计算数字各位之和 */
int digit_sum(int n) {
    int sum = 0;
    while (n > 0) {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}

int main() {
    int n;
    printf("请输入一个大于1的正整数n:");
    scanf("%d", &n);
    printf("2-%d之间符合条件的素数为:", n);
    for (int i = 2; i <= n; i++) {
        if (is_prime(i) && is_prime(digit_sum(i))) {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

给个关注,感谢🙏以下是一个简单的程序,可以输入n并输出小于n的所有素数

#include <iostream>

bool isPrime(int num) {
    if (num <= 1) return false; 
    for (int i = 2; i * i <= num; ++i) { 
        if (num % i == 0) return false; 
    }
    return true; 
}

int main() {
    int n;
    std::cout << "请输入n:";
    std::cin >> n;
    std::cout << "小于" << n << "的质数有:";
    for (int i = 2; i < n; ++i) { 
        if (isPrime(i)) std::cout << i << " "; 
    }
    std::cout << std::endl;
    return 0;
}

给个关注,感谢🙏

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7480034
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:[C题目]n个台阶,一步只能走1个台阶或者2个台阶,有几种走法?(非递归)(待改正)
  • 除此之外, 这篇博客: 【数据结构】进制转换中的 整数部分:除 N 取余,逆序排列 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数;
    • 保留余数,用商继续除以 N,又得到一个新的商和余数;
    • 如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。
      先得余数作为 N 进制数的低位数字,后得余数作为 N 进制数的高位数字,依次排列,得到 N 进制数字。
      例:十进制数字 36926 转换成八进制
      十进制转八进制