* Computer Science/Project Euler 47

project euler 38. problem

숫자 192에 1, 2, 3을 각각 곱합니다.192 × 1 = 192 192 × 2 = 384 192 × 3 = 576곱한 결과를 모두 이어보면 192384576 이고, 이것은 1 ~ 9 팬디지털(pandigital)인 숫자입니다. 이런 과정을 편의상 '곱해서 이어붙이기'라고 부르기로 합니다.같은 식으로 9와 (1, 2, 3, 4, 5)를 곱해서 이어붙이면 918273645 라는 1 ~ 9 팬디지털 숫자를 얻습니다.어떤 정수와 (1, 2, ... , n)을 곱해서 이어붙였을 때 얻을 수 있는 가장 큰 아홉자리의 1 ~ 9 팬디지털 숫자는 무엇입니까? (단 n > 1) 1234567891011121314151617181920212223242526272829def isPandigital(n): List = ..

project euler 36. problem

대칭수(palindrome)인 585는 2진수로 나타내도 10010010012가 되어 여전히 대칭수입니다.10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합을 구하세요.(주의: 첫번째 자리가 0이면 대칭수가 아님) 12345678910111213141516171819202122232425def palindrome(n): n = str(n) length = len(n) i = 0 while length > i: if n[i] == n[length-1]: i +=1 length -=1 else: return False return True arrays = range(1, 1000001)result = 0for element in arrays: if palindrome(element): if..

project euler 34. problem

숫자 145에는 신기한 성질이 있습니다. 각 자릿수의 팩토리얼(계승)을 더하면 1! + 4! + 5! = 1 + 24 + 120 = 145 처럼 자기 자신이 됩니다.이렇게 각 자릿수의 팩토리얼을 더하면 자기 자신이 되는 모든 수의 합을 구하세요.단, 1! = 1 과 2! = 2 의 경우는 덧셈이 아니므로 제외합니다. 12345678910111213141516171819def fact(n): result = 1 for i in range(1, n+1): result *= i return result result = 0 for i in range(3, 3000000): tmp = str(i) Sum = 0 for j in range(0, len(tmp)): Sum += fact(int(tmp[j])) if ..

project euler 33. problem

분수 49/98에는 재미있는 성질이 있습니다. 수학을 잘 모르는 사람이 분모와 분자에서 9를 각각 지워서 간단히 하려고 49/98 = 4/8 처럼 계산해도 올바른 결과가 됩니다.이에 비해 30/50 = 3/5 같은 경우는 다소 진부한 예라고 볼 수 있습니다.위와 같은 성질을 가지면서 '진부하지 않은' 분수는, 값이 1보다 작고 분자와 분모가 2자리 정수인 경우 모두 4개가 있습니다.이 4개의 분수를 곱해서 약분했을 때 분모는 얼마입니까? 1234567891011121314151617181920212223242526272829303132numX = 1denY = 1 for i in range(10, 100): if i % 10 == 0: continue for j in range(10, 100): nume..

project euler 32. problem

1부터 n까지의 각 숫자를 한번씩만 써서 만들 수 있는 숫자를 팬디지털(pandigital)이라고 합니다. 예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다.7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다.이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까?(참고: 어떤 c는 두 개 이상의 (a, b)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다) 12345678910111213141516171819202122232425262728293031323334353637383940def check(tmp): List = ['0', '0', '..

project euler 30. problem

각 자리의 숫자를 4제곱해서 더했을 때 자기 자신이 되는 수는 놀랍게도 단 세 개밖에 없습니다.1634 = 14 + 64 + 34 + 44 8208 = 84 + 24 + 04 + 84 9474 = 94 + 44 + 74 + 44(1 = 14의 경우는 엄밀히 말해 합이 아니므로 제외합니다)위의 세 숫자를 모두 더하면 1634 + 8208 + 9474 = 19316 입니다.그렇다면, 각 자리 숫자를 5제곱해서 더했을 때 자기 자신이 되는 수들의 합은 얼마입니까? 123456789101112131415161718192021 Sum = 0for target in range(2, 1000000): tmp = str(target) result = 0 for i in range(0, len(tmp)): result ..

project euler 29. problem

2 ≤ a ≤ 5 이고 2 ≤ b ≤ 5인 두 정수 a, b로 만들 수 있는 ab의 모든 조합을 구하면 다음과 같습니다.22=4, 23=8, 24=16, 25=32 32=9, 33=27, 34=81, 35=243 42=16, 43=64, 44=256, 45=1024 52=25, 53=125, 54=625, 55=3125여기서 중복된 것을 빼고 크기 순으로 나열하면 아래와 같은 15개의 숫자가 됩니다.4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125그러면, 2 ≤ a ≤ 100 이고 2 ≤ b ≤ 100인 a, b를 가지고 만들 수 있는 ab는 중복을 제외하면 모두 몇 개입니까? 12345678910array = []for a in range..

project euler 28. problem

숫자 1부터 시작해서 우측으로부터 시계방향으로 감아 5×5 행렬을 만들면 아래와 같이 됩니다.21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13여기서 대각선상의 숫자를 모두 더한 값은 101 입니다.같은 방식으로 1001×1001 행렬을 만들었을 때, 대각선상의 숫자를 더하면 얼마가 됩니까? 12345678910111213141516target1 = 1 # /target2 = 1 # \ result1 = 0result2 = 0 for i in range(0, 1001): target1 += 2*(i) result1 += target1 target2 += 4*((i+1)/2) result2 += target2 print "%d. target..

project euler 27. problem

오일러는 다음과 같은 멋진 2차식을 제시했습니다.n2 + n + 41이 식의 n에다 0부터 39 사이의 숫자를 넣으면, 그 결과는 모두 소수가 됩니다. 하지만 n = 40일 때의 값 402 + 40 + 41 은 40×(40 + 1) + 41 이므로 41로 나누어지고, n = 41일 때 역시 412 + 41 + 41 이므로 소수가 아닙니다.컴퓨터의 발전에 힘입어 n2 − 79n + 1601 이라는 엄청난 2차식이 발견되었는데, 이것은 n이 0에서 79 사이일 때 모두 80개의 소수를 만들어냅니다. 이 식의 계수의 곱은 -79 × 1601 = -126479가 됩니다.아래와 같은 모양의 2차식이 있다고 가정했을 때,n2 + an + b (단 | a | < 1000, | b | < 1000)0부터 시작하는 연속..