1부터 n까지의 각 숫자를 한번씩만 써서 만들 수 있는 숫자를 팬디지털(pandigital)이라고 합니다.
예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다.
7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다.
이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까?
(참고: 어떤 c는 두 개 이상의 (a, b)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | def check(tmp): List = ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0'] for i in range(0, len(tmp)): idx = int(tmp[i]) if tmp[i] == '0': return False if List[idx] == '0': List[idx] = tmp[i] elif List[idx] != '0': return False return True def pandigital(): CList = [] for a in range(1, 10000): for b in range(1, 10000): c = a*b tmp = str(c) + str(a) + str(b) if len(tmp) == 9: #print tmp if check(tmp): print "%d * %d = %d" % (a,b,c) isExist = True for i in CList: if i == c: isExist = False if isExist: CList.append(c) return CList CList = pandigital() Sum = 0 print CList for element in CList: Sum += element print "element Sum is %d" % Sum | cs |
C:\Users\cse\Desktop>python test.py
4 * 1738 = 6952
4 * 1963 = 7852
12 * 483 = 5796
18 * 297 = 5346
27 * 198 = 5346
28 * 157 = 4396
39 * 186 = 7254
42 * 138 = 5796
48 * 159 = 7632
138 * 42 = 5796
157 * 28 = 4396
159 * 48 = 7632
186 * 39 = 7254
198 * 27 = 5346
297 * 18 = 5346
483 * 12 = 5796
1738 * 4 = 6952
1963 * 4 = 7852
[6952, 7852, 5796, 5346, 4396, 7254, 7632]
element Sum is 45228
'* Computer Science > Project Euler' 카테고리의 다른 글
project euler 34. problem (0) | 2016.08.29 |
---|---|
project euler 33. problem (0) | 2016.08.26 |
project euler 30. problem (0) | 2016.08.25 |
project euler 29. problem (0) | 2016.08.25 |
project euler 28. problem (0) | 2016.08.24 |