프로젝트오일러
1 ≤ n ≤ 100 일때 nCr의 값이 1백만을 넘는 경우는 모두 몇 번?
2018.01.161,2,3,4,5 다섯 숫자 중에서 세 개를 고르는 것에는 다음과 같은 10가지 경우가 있습니다. 123, 124, 125, 134, 135, 145, 234, 235, 245, 345 조합론이라는 분야에서는 이것을 5C3 = 10 이라고 표시하며, 일반적인 식은 아래와 같습니다. nCr =n! r!(n−r)!, 단 r ≤ n 이고, n! = n×(n−1)×...×3×2×1 이며 0! = 1.이 값은 n = 23 에 이르러서야 23C10 = 1144066 으로 처음 1백만을 넘게 됩니다.1 ≤ n ≤ 100 일때 nCr의 값이 1백만을 넘는 경우는 모두 몇 번입니까? (단, 중복된 값은 각각 계산합니다) 간만에 풀었다.간단한데 문제를 자꾸 이해 못해서 몇 번 고침. from math import fact..
[Project Euler 38] 어떤 수에 (1, 2, ... )를 곱해서 이어붙여 얻을 수 있는 가장 큰 1 ~ 9 팬디지털 숫자
2016.05.04숫자 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) 이 문제를 풀려고 미뤄뒀던 32번 팬디지털 문제를 풀었다. 예전에는 끙끙거리면서 결국 못 풀었는데 요즘 그래도 늘고 있는지 둘 다 ..
[Project Euler 32] 1~9 팬디지털 곱셈식을 만들 수 있는 모든 수의 합
2016.05.021부터 n까지의 각 숫자를 한번씩만 써서 만들 수 있는 숫자를 팬디지털(pandigital)이라고 합니다. 예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다. 7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다. 이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까? (참고: 어떤 c는 두 개 이상의 (a, b)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다) 오늘 건...좀 멍청하게 짰다. 수도코드도 짜지 않았고... 풀기 귀찮아서 계속 미루다가 38번이 팬디지털을 응용하는 문제여서 풀었다. 좀더 예쁘게 짤 수 있을 것 같은데... 팬디지털..
[Project Euler 37] 왼쪽이나 오른쪽에서 한자리씩 없애가도 여전히 소수인 수의 합은?
2016.04.29소수 3797에는 왼쪽부터 자리수를 하나씩 없애거나 (3797, 797, 97, 7) 오른쪽부터 없애도 (3797, 379, 37, 3) 모두 소수가 되는 성질이 있습니다.이런 성질을 가진 소수는 단 11개만이 존재합니다. 이것을 모두 찾아서 합을 구하세요.(참고: 2, 3, 5, 7은 제외합니다) 이번엔 문제가 간단해 보여서 수도 코드를 짜지 않았다.소수가 나왔으므로 역시나 primesieve 모듈을 사용했다.처음엔 아래 적어놓은 조건대로 for loop를 돌릴까 했으나, primesieve가 훨씬 편해서... 아래는 테스트코드
[Project Euler 36] 10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합
2016.04.27대칭수(palindrome)인 585는 2진수로 나타내도 10010010012가 되어 여전히 대칭수입니다. 10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합을 구하세요. (주의: 첫번째 자리가 0이면 대칭수가 아님) 이번 거는 긴 버전, 짧은 버전 두 개로 만들어 봤다. python에 2진수를 구하는 함수 bin()이 있어서 정말 편하게 짰다! 아래는 먼저 짠 수도 코드. 이번엔 완벽히 수도 코드대로 짜서 기분 좋다. 짜고 나서 굉장히 뿌듯했던ㅎㅎ 긴 버전은 함수명만 보고도 어떤 과정을 거치는지 자세히 알 수 있도록 짰다. 짧은 버전은 말그대로 짧게! 아래는 매번 짜고 있는 테스트 함수다. 물론 알고리즘이 간단한 코드로 끝날 때에는 좀 번거롭기도 하지만 함수가 세 개 이상으로 늘어날 ..
[Project Euler 35] 백만 이하인 circular prime 개수 구하기
2016.04.23소수 중에서 각 자리의 숫자들을 순환시켜도 여전히 소수인 것을 circular prime이라고 합니다. 예를 들어 197은 971, 719가 모두 소수이므로 여기에 해당합니다.이런 소수는 100 밑으로 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97 처럼 13개가 있습니다. 그러면 1,000,000 밑으로는 모두 몇 개나 있을까요? 3.8초 정도가 걸렸다.이번 문제도 꽤나 재밌었다.처음엔 순환이 아니라, 순열로 착각해서 itertools 모듈의 permutations 함수를 썼었다.삽질 잠깐 하다가, deque로 만들어 그 길이만큼 rotate() 시켰다.(deque는 처음 써봤다!) 신기하게도(?) primesieve 모듈에 소수 판별 함수가 없어서, 해당 num을 ..
[Project Euler 33] 이상한 방법으로 약분할 수 있는 분수 찾기
2016.04.21분수 49/98에는 재미있는 성질이 있습니다. 수학을 잘 모르는 사람이 분모와 분자에서 9를 각각 지워서 간단히 하려고 49/98 = 4/8 처럼 계산해도 올바른 결과가 됩니다. 이에 비해 30/50 = 3/5 같은 경우는 다소 진부한 예라고 볼 수 있습니다. 위와 같은 성질을 가지면서 '진부하지 않은' 분수는, 값이 1보다 작고 분자와 분모가 2자리 정수인 경우 모두 4개가 있습니다. 이 4개의 분수를 곱해서 약분했을 때 분모는 얼마입니까? 이번 문제는 굉장히 재미있게 풀었다. 함수명이나 변수명 짓는 것도 재미있었고ㅋㅋ 원래는 함수를 두 개 정도로 만들려고 했지만..나누니까 더 복잡해져서 그냥 하나로 풀었다. 아래는 먼저 짠 수도코드.
[Project Euler 34] 각 자릿수의 팩토리얼을 더했을 때 자기 자신이 되는 수들의 합은?
2016.04.20숫자 145에는 신기한 성질이 있습니다. 각 자릿수의 팩토리얼(계승)을 더하면 1! + 4! + 5! = 1 + 24 + 120 = 145 처럼 자기 자신이 됩니다. 이렇게 각 자릿수의 팩토리얼을 더하면 자기 자신이 되는 모든 수의 합을 구하세요. 단, 1! = 1 과 2! = 2 의 경우는 덧셈이 아니므로 제외합니다. 팩토리얼은 math 모듈에 있는 factorial 함수를 썼고, range는...내맘대로... 근데 두 개밖에 안 나오더라.
(무식)[Project Euler 30] 각 자리 숫자를 5제곱해서 더했을 때 자기 자신이 되는 수들의 합은?
2016.03.18각 자리의 숫자를 4제곱해서 더했을 때 자기 자신이 되는 수는 놀랍게도 단 세 개밖에 없습니다. 1634 = 14 + 64 + 34 + 44 8208 = 84 + 24 + 04 + 84 9474 = 94 + 44 + 74 + 44 (1 = 14의 경우는 엄밀히 말해 합이 아니므로 제외합니다) 위의 세 숫자를 모두 더하면 1634 + 8208 + 9474 = 19316 입니다. 그렇다면, 각 자리 숫자를 5제곱해서 더했을 때 자기 자신이 되는 수들의 합은 얼마입니까? 매우 무식하게 짰음. 1.3초 정도 걸림
[Project Euler 29] 2 ≤ a ≤ 100 이고 2 ≤ b ≤ 100인 a, b로 만들 수 있는 ab의 개수
2016.03.182 ≤ 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는 중복을 제외하면 모두 몇 개입니까? 오늘 건 굉장히 쉬웠음
[Project Euler 28] 1001×1001 나선모양 행렬에서 대각선 원소의 합은?
2016.03.16숫자 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 행렬을 만들었을 때, 대각선상의 숫자를 더하면 얼마가 됩니까? 일단 사각형 모서리 4개를 더하는 함수 하나 만든 뒤에, for문 돌려서 모든 사각형 합 구함
[Project Euler 27] 연속되는 n에 대해 가장 많은 소수를 만들어내는 2차식 구하기
2016.03.16오일러는 다음과 같은 멋진 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부터 시..