← Back to List

4839번: 소진법 ↗

Solutions

Python 3
720 B | 720 chars
L = [i for i in range(30)]
L[0]=-1
L[1]=-1
k = [1]
for i in range(2,30):
    if L[i] == i:
        k.append(i)
        for j in range(i+i,30,i):
            L[j] = -1

z = [k[0]]
for i in k[1:]:
    z.append(z[-1]*i)
z.reverse()
k.reverse()
while True:
    ans = []
    a = int(input())
    b = a
    if a == 0:
        break
    ans = []
    for i in range(len(z)):
        if a >=z[i]:
            ans.append((i,a//z[i]))
            a %=z[i]

    answer = []
    for i in range(len(ans)):
        answer.append(str(ans[i][1]))
        if ans[i][0]!=10:
            for t in range(9,ans[i][0]-1,-1):
                answer[-1] += ("*{}".format(k[t]))
    answer.reverse()
    print(str(b) + " = " + " + ".join(answer))