프로젝트 오일러 32번
39*186=7254 처럼 1~9가 한번씩 나오는 곱셈을 모두 찾고 이 때의 곱을 모두 더하라라
작은 수를 x, 큰 수를 y 라고 하면, x, y, x*y의 자리수는 이런 조합이 가능하다.
1, 4, 4
2, 3, 4
다른 경우는 생각할 수 없다.
그럼 x는 2 이상 99 이하(정확히는 98 이하), y는 100이상(정확히는 123이상).
한 줄로 쓰면..
print sum(set(x*y for x in range(2,100) for y in range(123,4000) if ''.join(sorted(str(x)+str(y)+str(x*y))) == '123456789'))
1초 걸린다.
x*y가 4자리를 넘어가면 더 이상 계산할 필요가 없으니 이렇게 고쳐도 된다.
for x in range(2,100):
for y in range(123,4000):
if ''.join(sorted(str(x)+str(y)+str(x*y))) == '123456789':
print x, y, x*y
if x*y>10000: break
그럼, 0.08초
No comments:
Post a Comment