有些数能若干个数的阶乘之和。例如,数字9,9=1!+2!+3!。给定一个数n(n<=1,000,000),判断它是否能表示成若干个数的阶乘之和。注意,这些数不一定是连续的,也不一定从1开始。
输入描述
输入数据有多组,每组占一行,由一个整数组成,直到输入-1结束。
输出描述
对于每组输入数据,输出一行。如果能表示成阶乘之和,输出“YES”,否则输出“NO”。
输入样例
0 1 2 9 10 12 24 5040 -1
输出样例
NO YES YES YES YES NO YES YES
import math
from itertools import combinations
def fact(num):
ls = [math.factorial(x) for x in range(num)]
return ls
def fact_test(num, fact_ls):
if num == 0:
return False
for i in range(num+1):
for num_i in combinations(fact_ls, i):
if num == sum(num_i):
print(f'{num} =', '! + '.join(map(str, num_i))+'!')
return True
else:
return False
if __name__ == '__main__':
while True:
n = int(input())
if n < 0:
break
fact_lst = fact(n)
print(fact_test(n, fact_lst))