有些数能若干个数的阶乘之和。例如,数字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 mathfrom itertools import combinationsdef fact(num):ls = [math.factorial(x) for x in range(num)]return lsdef fact_test(num, fact_ls):if num == 0:return Falsefor 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 Trueelse:return Falseif __name__ == '__main__':while True:n = int(input())if n < 0:breakfact_lst = fact(n)print(fact_test(n, fact_lst))
