Tuesday, June 2, 2015

Project Euler #52 - permutated multiples

프로젝트 오일러 52번 - 2,3,4,5,6을 곱해도 자리만 바뀌고 숫자는 유지되는 수는?

이거... 26번 문제를 잘 들여다 보면 답이 보인다. (포럼보다 알게 된 사실)
1/7 = 0.142857 142857 142857 ...
2/7 도 6자리가 반복되고,
3/7 도 6자리가 반복되고,
...
6/7 도 6자리가 반복된다.
그래서.. 답은 142857!

김이 샌 상태이긴 하지만 그래도 코딩을 해 보자.
6을 곱해도 자리수가 늘어나면 안 되니 반드시 1로 시작해야 한다. 2, 3, 4, 5, 6을 곱했을 때 첫째 자리 숫자는 계속 바뀔테니 적어도 6개의 숫자가 필요하다. 6자리에서 답이 나온다면 0은 끼어들 틈이 없다. 여기서 답이 안 나오면 7자리로 도전.

digits = {2,3,4,5,6,7,8,9}
d6 = 1
for d5 in range(2,7):
    for d4 in digits - {d5}:
        for d3 in digits - {d4,d5}:
            for d2 in digits - {d3,d4,d5}:
                for d1 in digits - {d3,d4,d5,d6}:
                    d = 100000+10000*d5+1000*d4+100*d3+10*d2+d1
                    ds = set(`d`)
                    if ds==set(`d*2`)==set(`d*3`)==set(`d*4`)==set(`d*5`)==set(`d*6`):
                        print d

0.03초. 6자리에서 답이 나왔으니 만족.

No comments: