python这个好难怎么做

找出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等等

程序中包含两个函数,分别用于实现判断素数和计算阶乘

代码:

def is_prime(n):
    """
    判断一个数是否为素数
    """
    if n <= 1:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True
def factorial(n):
    """
    计算一个数的阶乘
    """
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)
for i in range(800, 1201):
    digits = [int(d) for d in str(i)]
    factorial_sum = sum([factorial(d) for d in digits])
    if is_prime(factorial_sum):
        print(f"{i}:{'+'.join([f'{d}!={factorial(d)}' for d in digits])}={factorial_sum}")

#include <stdio.h>

int f(int n) {
    if (n == 0 || n == 1) {
        return 1;
    } else {
        return n * f(n-1);
    }
}

int is_prime(int n) {
    int i;
    for (i = 2; i < n; i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}

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


首先定义了两个函数,is_prime 用于判断一个数是否为素数,factorial_sum 用于计算一个数的各位数字的阶乘和。
然后使用一个循环来遍历800到1200之间的所有数字,计算各位数字的阶乘和,并判断该和是否为素数,如果是则打印出符合条件的数字和各位数字的阶乘和。具体代码如下:

import math

def is_prime(n):
    """判断是否为素数"""
    if n < 2:
        return False
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True

def factorial_sum(n):
    """计算各位数字的阶乘和"""
    return sum(math.factorial(int(d)) for d in str(n))

for n in range(800, 1201):
    f_sum = factorial_sum(n)
    if is_prime(f_sum):
        print(f"{n}:{'+'.join(f'{d}!' for d in str(n))}={f_sum}")

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢


##判断数字是否为素数
from math import sqrt,factorial
def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

##计算阶乘的值
def caculate(n):
    result = 0
    for i in str(n):
        result += factorial( int(i) )
    return result

for i in range(800,1201):
    result = caculate(i)
    if isPrime(result):
        t = [ '{}!'.format(z) for z in str(i) ]
        print(f"{ i }:{ '+'.join(t) }={ result }")