본문 바로가기

오일러프로젝트

[오일러프로젝트] 63번문제 다섯 자리 숫자인 16807은 75으로 5제곱수입니다. 또, 아홉 자리 숫자인 134217728은 89으로 9제곱수입니다.n자리 숫자이면서 n제곱수도 되는 양의 정수는 모두 몇 개나 있습니까? 길이만 비교하면 되는거였는데..문제를 잘못이해해서 .. 실제 값이 맞는지까지 비교하고 있었네...숫자의 자리수는 log를 사용하면 구할 수 있다함.. 이 코드에서는 그냥 len 사용. Python 더보기
[오일러프로젝트] 62번문제 세제곱수인 41063625 (=3453) 로 순열을 만들어보면, 그 중에서 56623104 (=3843)와 66430125 (=4053)가 또 세제곱수입니다. 실제 41063625은, 자릿수로 만든 순열 중에서 3개가 세제곱수인 가장 작은 수입니다.그러면 자릿수로 만든 순열 중에서 5개가 세제곱수인 가장 작은 숫자는 무엇입니까? 처음에 순열이라는 단어에 혹해서 n**3인 dict를 생성하고, 각 n**3의 순열 리스트를 구해서 5개가 되는지하나하나 찾아가는 로직으로 구현했는데 속도가 너무 떨어졌다. 생각해보니 순열이라는것이결국은 sort하면 같은 수가 되는 애들이라.. 57623의 다른 순열 23675가 있을 때 이 두 수를 정렬시키면23567로 같은 수를 가지게 되는 것... 이것을 사용해서 n**3의.. 더보기
[오일러프로젝트] 61번문제 삼각수, 사각수, 오각수 같은 다각수들은 아래의 공식으로 만들 수 있습니다.삼각수P3,n = n(n+1)/21, 3, 6, 10, 15, ...사각수P4,n = n21, 4, 9, 16, 25, ...오각수P5,n = n(3n−1)/21, 5, 12, 22, 35, ...육각수P6,n = n(2n−1)1, 6, 15, 28, 45, ...칠각수P7,n = n(5n−3)/21, 7, 18, 34, 55, ...팔각수P8,n = n(3n−2)1, 8, 21, 40, 65, ...그런데 4자리 숫자 8128, 2882, 8281 (순서대로) 에는 세 가지의 재미있는 성질이 있습니다.각 숫자들은 서로 꼬리를 물고 순환됩니다. 각 숫자의 뒤쪽 두 자리는 다음 숫자의 앞쪽 두 자리가 되는 식입니다.각 숫자는 서로 .. 더보기
[오일러프로젝트] 60번문제 네 개의 소수 3, 7, 109, 673은 상당히 특이한 성질이 있습니다. 넷 중에 아무것이나 두 개를 골라서 어떤 쪽으로 이어붙이던지 그 결과도 소수가 됩니다. 예를 들어 7과 109를 고르면 7109와 1097 또한 소수입니다. 3, 7, 109, 673는 이런 성질을 가진 네 소수 중에서 그 합이 792로 가장 작습니다,다섯 소수 중에 어떤 두 개를 골라 이어붙여도 소수가 되는 수들을 찾아서, 그 합의 최소값을 구하세요. 드디어 60번문제..처음에는 5개 소수 리스트를 하나씩 뽑아내서 순열 조합을 생성하고 (5C2)이 조합들이 모두 소수인지 확인하는 형태로 구현했는데 2시간이 넘어도 답이 안나와 -_-; 그래서 앞쪽부터 보초를 많이 세우는 방식으로.... Python 보통 오일러프로젝트 풀면서 전체.. 더보기
[오일러프로젝트] 58번문제 숫자 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 행렬을 만들었을 때, 대각선상의 숫자를 더하면 얼마가 됩니까? 예전에 28번문제 풀었던 풀이를 재사용...막간을 이용한 한문제 풀이 ㅋㅋ Python 더보기
[오일러프로젝트] 57번문제 제곱근 2는 다음과 같은 연분수의 형태로 나타낼 수 있습니다.√ 2 = 1 + 1/(2 + 1/(2 + 1/(2 + ... ))) = 1.414213...위 식을 처음부터 한 단계씩 확장해 보면 아래와 같습니다.1 + 1/2 = 3/2 = 1.5 1 + 1/(2 + 1/2) = 7/5 = 1.4 1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666... 1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379...그 다음은 99/70, 239/169, 577/408 로 확장이 되다가, 여덟번째인 1393/985 에 이르면 처음으로 분자의 자릿수가 분모의 자릿수를 넘어섭니다.처음부터 1천번째 단계까지 확장하는 중에, 분자의 자릿수가 분모보다 많아지는 경.. 더보기
[오일러프로젝트] 56번문제 구골(googol)은 10100을 일컫는 말로, 1 뒤에 0이 백 개나 붙는 어마어마한 수입니다. 100100은 1 뒤에 0이 2백 개가 붙으니 상상을 초월할만큼 크다 하겠습니다. 하지만 이 숫자들이 얼마나 크건간에, 각 자릿수를 모두 합하면 둘 다 겨우 1밖에 되지 않습니다.a, b < 100 인 자연수 ab 에 대해서, 자릿수의 합이 최대인 경우 그 값은 얼마입니까? 심플한문제..심플하게 loop. 요즘 그냥 파이썬으로만 풀고있음..;;; Python 더보기
[오일러프로젝트] 55번문제 47이란 숫자를 골라서 뒤집은 다음 다시 원래 수에 더하면, 47 + 74 = 121 과 같이 대칭수(palindrome)가 됩니다. 물론 모든 숫자가 이토록 쉽게 대칭수를 만들어내지는 않습니다. 예를 들어 349의 경우,349 + 943 = 1292 1292 + 2921 = 4213 4213 + 3124 = 7337위에서 보는 것처럼 3번의 반복과정을 거쳐야 대칭수가 됩니다.196과 같은 몇몇 숫자들은 이와 같은 과정을 아무리 반복해도 대칭수가 되지 않을 것이라고 추측되는데, 이런 수를 라이크렐 수 (Lychrel number) 라고 부릅니다. 아직 증명되지는 않았지만, 문제 풀이를 위해서 일단 라이크렐 수가 존재한다고 가정을 하겠습니다.또한 1만 이하의 숫자들은, 50번 미만의 반복으로 대칭수가 되든.. 더보기
[오일러프로젝트] 54번문제 포커라는 카드게임은 다섯 장으로 된 패의 높고 낮음에 따라 승부를 냅니다. (포커 규칙을 이미 아는 분이라면 규칙 설명 부분은 건너뛰셔도 좋습니다) 카드 한 장은 아래와 같은 순서대로 값이 높아집니다.2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A 다섯 장으로 이루어진 패의 계급(세칭 "족보")은, 낮은 것부터 높은 순서로 아래와 같습니다.High Card : 가장 높은 카드의 값으로 비교.One Pair : 한 쌍이 같은 카드.Two Pairs : 서로 다른 두 쌍이 같은 카드.Three of a Kind : 세 장이 같은 카드.Straight : 모든 카드가 연속된 숫자.Flush : 모든 카드의 무늬가 같음.Full House : 세 장이 같고, 또 한 쌍이 같음 (Three .. 더보기
[오일러프로젝트] 53번문제 1,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백만을 넘는 경우는 모두 몇 번입니까? (단, 중복된 값은 각각 계산합니다) 문제는 길지만 어렵지않은 문제.. 그냥 구하면됨.. Ruby Perl 더보기