본문 바로가기
반응형

Project Euler41

46. 프로젝트 오일러 #46 : 골드바흐의 다른 추측 이번문제는 골드바흐의 소수에 관련된 오래된 추측과 모양만 유사한 문제입니다. 골드바흐의 추측은 당시 많은 수학자들의 예상을 깨고, 아직까지 증명되지 않은 문제입니다. (홀수 완전수와 비슷하게 증명이 쉽게 이루어질거라는 예상을 깨고서 아직까지 증명되지 않았습니다.) 문제의 난이도는 5%로 상당히 낮습니다. 풀이 자체가 어렵지 않습니다. 문제를 살펴보면 다음과 같습니다. 영어를 해석하는 데 문제가 없다면, 이 문제를 푸는 데 어려움도 없을겁니다. 모든 홀수 합성수(1과 소수를 제외한 자연수)는 소수와 제곱수의 2배수의 합으로 표현이 된다는 추측입니다. 하지만 이 추측은 거짓으로 증명됩니다. 거짓이 되는 가장 작은 홀수 합성수는 얼마일까요? 이 문제는 그냥 단순하게 적용하면 별 무리 없이 풀 수 있습니다. 저.. 2016. 5. 31.
프로젝트 오일러 #45 삼각수, 오각수, 육각수 삼각수, 오각수, 육각수라는 것은 앞에 #44(http://sdev.tistory.com/224)에서 설명한 것과 같이 도형을 그릴 때, 발생하는 점들의 갯수입니다. 이 문제에서 원하는 것은 40755 다음에 나타나는, 삼각수이자, 오각수, 그리고 육각수인 숫자를 찾는 것입니다. 삼각수를 기준으로 하든지, 육각수를 기준으로 하든지, 다른 숫자들을 맞추어 나가면 됩니다. 간단하게 공차식을 구해서 계산하는 것이 편하겠죠. 그래서 만들어진 소스는 다음과 같습니다. #include #include int main() { uint64_t t = 40755, p = 40755, h = 40755; uint64_t dt = 286, dp = 496, dh = 573; t += dt; dt++; while( 1 ) {.. 2016. 5. 27.
프로젝트 오일러 #44 오각수 이번 문제는 오각수라는 특이한 수를 만들어내어야 합니다. 오각수는 오각형으로 점을 찍어나갈 때, 점의 갯수입니다. 편의를 위해서 그림을 첨부하면 다음과 같습니다. 프로젝트 오일러 사이트의 문제는 다음과 같습니다. 오각수라는 것을 설명하고 있고, 오각수들의 순열중에, 어느 두개의 오각수의 차와 합이 또다른 오각수들이 되는 것을 찾아야 합니다. 오각수를 나타내는 공식은 문제에서와 같이 다음과 같습니다. \[ P_n = n(3n-1)/2 \] 그리고 오각수는 단순증가이므로, 결국 문제에서 원하는 것은 다음을 만족하는 최소의 \(P_s\) 값을 찾는 것입니다. \[ P_s + P_t = P_u \] \[ P_t + P_u = P_v \] 그냥 단순한 방법으로 위 식을 만족하는 s, t 를 찾으면 됩니다. 저는 .. 2016. 5. 26.
43. 프로젝트 오일러 #43 : 부분 문자열 나누어 떨어지기 이번 문제도 간단한 문제입니다. (난이도 5%) 문제 자체는 팬디지털(0~9까지의 숫자를 한번씩만 쓴 숫자)의 부분 문자열이 특정 소수로 나누어지는 가를 판별하면 됩니다. 가장 손쉽게 구현할 수 있는 방법은 백트랙킹(back tracking) 방법을 사용합니다. 속도를 조금이라도 빠르게 하기 위해서 숫자를 만들 때, 세개의 숫자를 쓰는 것이 아니라, 기존의 값에 10을 곱한 후 새로운 값을 더하는 방식으로 구현했습니다. (사실 그다지 이것에 의해서 속도 차이가 발생하지는 않을겁니다.) 간단한 형태의 자기호출 함수를 사용해서 만들었습니다. 소스에 대한 설명은 굳이 필요하지는 않을 듯 하네요. #include #include uint64_t SumPD(uint64_t n, int mask, int t); i.. 2016. 5. 25.
42. 프로젝트 오일러 #42 : 삼각수 단어 이 문제는 알고리즘이 크게 필요하지는 않습니다.그래서인지 문제의 난이도는 5%입니다. 문제 자체도 상당히 가벼운 편이고요. 검사해야할 단어의 갯수도 많지 않습니다. 이 문제는 영어문자를 A->1, B->2, .. 형식으로 단어를 바꾸면, 숫자의 나열이 되는데, 이 숫자들의 합이 삼각수인 가만 검사하면 됩니다. 삼각수라는 것은 1~n까지의 합 형태가 되면 됩니다. 1, 3, 6, 10, 15, 21, ... 등등이 모두 삼각수입니다. 사실 단어의 수가 길지 않으므로, 간단하게 삼각수 테이블을 만들고 해당 수가 삼각수인지 검사하는 것이 가장 간단하겠죠. 단어의 길이가 40글자라고 해도 글자 하나당 26까지밖에 없으므로 대략 1200까지의 삼각수만 구하면 됩니다. 그러고 나서 해당 값이 채워졌는지만 검사하면 .. 2016. 5. 24.
41. 프로젝트 오일러 #41 : 팬디지털 소수 이 문제의 난이도 5%입니다. 그렇게 어렵지 않은 문제이죠. 문제를 살펴보면 다음과 같습니다. 우리는 1부터 n까지 정확하게 한번씩만 사용한 n자리 숫자가 있다면, 이것을 팬디털(pandigital) 숫자라고 부릅니다. 예를 들어서 2143은 4자리 팬디지털 숫자이면서, 또한 소수입니다. 가장 큰 n자리 팬디지털 소수는 얼마일까요? 일단 팬디지털이라는 것을 알았으면, 우리는 간단하게 1~9까지 한번만 사용해서 이 숫자를 구하면 됩니다. 팬디지털을 만들 수 있는 가장 큰 자릿수는 9자리입니다. 왜냐하면 그 이상부터는 두자리숫자가 될 수밖에 없기 때문에 팬디지털 정의에 어긋납니다. 프로그램은 9자릿수부터 만들 수 있는 모든 팬디지털수를 만듭니다. (사실 이것을 1부터 n까지 배열하는 순열수입니다.) 순열 수.. 2015. 10. 27.
728x90