找出800-1200之间所有符合以下条件的数, 用C语言实现

该问题来自社区帖: https://bbs.csdn.net/topics/614505148
找出800-1200之间所有符合以下条件的数:该数的各位数字的阶乘和为素数。按如下格式打印出所有符合条件的数: 807:8!+0!+7!=45361 817:8!+1!+7!=45361 870:8!+7!+0!=45361 871:8!+7!+1!=45361 1002:1!+0!+0!+2!=5 1012:1!+0!+1!+2!=5 1020:1!+0!+2!+0!=5 ………… 程序中包含两个函数,分别用于实现判断素数和计算阶乘。

源于Chatgpt:

import math
# 计算阶乘
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)
# 判断素数
def is_prime(n):
    if n < 2:
        return False
    else:
        for i in range(2, int(math.sqrt(n))+1):
            if n % i == 0:
                return False
        return True
# 寻找符合条件的数
for n in range(800, 1201):
    digits = [int(d) for d in str(n)]
    factorial_sum = sum(factorial(d) for d in digits)
    if is_prime(factorial_sum):
        factors = '+'.join('{}!'.format(d) for d in digits)
        print('{}:{}={}'.format(n, factors, factorial_sum))
----------------------------------------------------------------------
807:8!+0!+7!=45361
817:8!+1!+7!=45361
870:8!+7!+0!=45361
871:8!+7!+1!=45361
1002:1!+0!+0!+2!=5
1012:1!+0!+1!+2!=5
1020:1!+0!+2!+0!=5
1021:1!+0!+2!+1!=7
1032:1!+0!+3!+2!=29
1053:1!+0!+5!+3!=151
1065:1!+0!+6!+5!=719
1072:1!+0!+7!+2!=509
1112:1!+1!+1!+2!=5
1120:1!+1!+2!+0!=5
1121:1!+1!+2!+1!=7
1132:1!+1!+3!+2!=29
1153:1!+1!+5!+3!=151
1165:1!+1!+6!+5!=719
1172:1!+1!+7!+2!=509
1200:1!+2!+0!+0!=3
--------------------------------------------
其中,factorial()函数用于计算阶乘,is_prime()函数用于判断素数。在主函数中,我们使用了Python内置的range()函数来遍历8001200之间的数,然后对每个数进行如下操作:


将该数的各位数字分离出来,并计算它们的阶乘和。

判断阶乘和是否为素数,如果是,就打印出符合条件的数的信息。
值得一提的是,题目中要求的各位数字的阶乘和并不是指整个数的阶乘,而是指该数每个数字的阶乘之和。因此,在代码中我们需要将每个数字提取出来,再分别计算它们的阶乘。

参考一下

#include <stdio.h>

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

// 计算阶乘
int factorial(int n)
{
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

int main()
{
    for (int i = 800; i <= 1200; i++) {
        int n = i;
        int sum = 0;
        while (n > 0) {
            int digit = n % 10;
            sum += factorial(digit);
            n /= 10;
        }
        if (is_prime(sum)) {
            printf("%d:", i);
            n = i;
            while (n > 0) {
                int digit = n % 10;
                printf("%d!", digit);
                n /= 10;
                if (n > 0) {
                    printf("+");
                }
            }
            printf("=%d\n", sum);
        }
    }
    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^