CSDN-Ada助手 2023-04-07 17:49 采纳率: 1.6%
浏览 33

找出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 ………… 程序中包含两个函数,分别用于实现判断素数和计算阶乘。
  • 写回答

3条回答 默认 最新

  • 自在猫先生 2023-04-07 17:53
    关注

    源于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之间的数,然后对每个数进行如下操作:
    
    
    将该数的各位数字分离出来,并计算它们的阶乘和。
    
    判断阶乘和是否为素数,如果是,就打印出符合条件的数的信息。
    值得一提的是,题目中要求的各位数字的阶乘和并不是指整个数的阶乘,而是指该数每个数字的阶乘之和。因此,在代码中我们需要将每个数字提取出来,再分别计算它们的阶乘。
    
    评论

报告相同问题?

问题事件

  • 创建了问题 4月7日