在 Python 中检查一个数字是否是彼得森数(Peterson number)

如果一个数字,每位数字的阶乘之和等于给定数字本身,那么给定的数字称为彼得森数。

例如:N = 145

145 = 5! + 4! + 1!

= 120 + 24 +1

= 145

145 是一个彼得森数。

方法1:

算法:

  • 使用 import 导入 math 模块。

  • 将待检测数字存储在变量 sum。

  • 定义变量 sumfact 并将其初始化为 0,用于存储阶乘之和。

  • 使用 str() 函数将给定的数字 num 转换为字符串。

  • 使用 list()、map()、split() 函数将给定的数字转换为数字列表。

  • 使用 for 循环遍历此数字列表。

  • 使用 math.factorial() 函数计算列表元素的阶乘。

  • 将此阶乘值累加到 sumfact。

  • 使用 If 条件语句检查 sumfact == sum。

  • 如果语句为 True,则输出给定的数字是是一个彼得森数。

  • 否则,输出给定的数字不是一个彼得森数。

import math
num = 145
sumfact = 0
strnum = str(num)
lstdigts = list(map(int, strnum))
for i in lstdigts:
    numfact = math.factorial(i)
    sumfact = sumfact+numfact
if sumfact == num:
    print(num, '是一个彼得森数。')
else:
    print(num, '不是一个彼得森数。')

方法2:

算法:

将 0~9 的阶乘存储到列表,提取给定数字的每位数字并从列表找到它的阶乘并求和。

  • 自定义列表 fact,存储 0~9 的阶乘。

  • 自定义函数 peterson(n)。

  • 使用 while 循环。

  • 使用取余运算获取最后一位数字。

  • 从列表获取阶乘并累加求和。

  • 使用整除运算去掉最后一位数字。

  • 循环执行,得到阶乘之和。

  • 自定义函数 peterson(n) 返回 sumnum == num 结果。

  • 将待检测数字存储在变量 n。

  • 使用 If 条件语句检查 peterson(n) 的结果。

  • 如果语句为 True,则输出给定的数字是是一个彼得森数。

  • 否则,输出给定的数字不是一个彼得森数。

fact = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880] 
def peterson(n): 
    num = n 
    sumnum = 0
    while n > 0: 
        m = n % 10 
        sumnum += fact[m] 
        n = n // 10 
    return sumnum == num 
n = 145
if peterson(n):
    print(n, '是一个彼得森数。')
else:
    print(n, '不是一个彼得森数。')

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈。