파이썬 2,156
from itertools import*
from operator import*
i=input()
print sum(reduce(mul,[a**b for a,b in zip(i[0],p)])for p in product(*map(range,[x+1 for x in i[1]])))
입력
[[2,3,5],[4,1,1]]
산출
744
설명
이 프로그램은 요인과 지수의 두 가지 목록을받습니다.
i=input() # Receive list of 2 lists: i[0] for factors i[1] for exponents
그런 다음 지수 목록의 가능한 모든 조합 목록을 만듭니다.
[x+1 for x in i[1]] # [4,1,1]->[5,2,2] (to include last element)
map(range,[x+1 for x in i[1]]) # [[0, 1, 2, 3, 4], [0, 1], [0, 1]]
product(*map(range,[x+1 for x in i[1]])) # [(0, 0, 0), (0, 0, 1), ..., (4, 1, 1)]
그리고 요인으로 압축하십시오 :
zip(i[0],p) for p in product(*map(range,[x+1 for x in i[1]])) # [[(2, 0), (3, 0), (5, 0)], ..., [(2, 4), (3, 1), (5, 1)]]
지수의 거듭 제곱에 대한 요소를 계산합니다.
[a**b for a,b in zip(i[0],p)]for p in product(*map(range,[x+1 for x in i[1]])) # [[1, 1, 1], ..., [16, 3, 5]]
각 목록을 곱하십시오 (이것은 모든 제수를 제공합니다).
reduce(mul,[a**b for a,b in zip(i[0],p)])for p in product(*map(range,[x+1 for x in i[1]])) # [1, 5, 3, 15, ..., 240]
마지막으로 모든 목록을 요약하고 인쇄하십시오.
print sum(reduce(mul,[a**b for a,b in zip(i[0],p)])for p in product(*map(range,[x+1 for x in i[1]]))) # 744