找出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等等
程序中包含两个函数,分别用于实现判断素数和计算阶乘
找出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}")