본문 바로가기
반응형

Programming/Project Euler89

41. 프로젝트 오일러 #41 : 팬디지털 소수 이 문제의 난이도 5%입니다. 그렇게 어렵지 않은 문제이죠. 문제를 살펴보면 다음과 같습니다. 우리는 1부터 n까지 정확하게 한번씩만 사용한 n자리 숫자가 있다면, 이것을 팬디털(pandigital) 숫자라고 부릅니다. 예를 들어서 2143은 4자리 팬디지털 숫자이면서, 또한 소수입니다. 가장 큰 n자리 팬디지털 소수는 얼마일까요? 일단 팬디지털이라는 것을 알았으면, 우리는 간단하게 1~9까지 한번만 사용해서 이 숫자를 구하면 됩니다. 팬디지털을 만들 수 있는 가장 큰 자릿수는 9자리입니다. 왜냐하면 그 이상부터는 두자리숫자가 될 수밖에 없기 때문에 팬디지털 정의에 어긋납니다. 프로그램은 9자릿수부터 만들 수 있는 모든 팬디지털수를 만듭니다. (사실 이것을 1부터 n까지 배열하는 순열수입니다.) 순열 수.. 2015. 10. 27.
515. 프로젝트 오일러 #515 : 불협화음 숫자들 문제 : Let d(p,n,0) be the multiplicative inverse of n modulo prime p, defined as n × d(p,n,0) = 1 mod p. Let for k ≥ 1.Let for all primes a ≤ p = 0 ) { int64_t r = t; t = -t*rec[count]+s; s = r; } t = (t>0)?t:p+t; return t; } 사실 인터넷에 뒤져보면, 아마 역원 구하는 알고리즘이 나와있을 것 같은데, 저는 알고리즘을 수학적 방법으로 제가 알고 있는 그대로를 구현했기 때문에 성능은 보장하지 못 합니다. 그리고 오버플로우가 발생할 수도 있고요. 이렇게 하면, 역원을 구하는 것과 d(p, n, 0)의 갯수를 세는 것이 다 되었습니다.그런.. 2015. 5. 12.
[C/C++] 프로젝트 오일러 #508 : \(i-1\) 진법 표시하기(수학) 이번 문제는 아직까지도 푼 사람이 100명이 넘지 않는 문제네요. 그만큼 복잡할 수 있는 문제이므로, 블로그에 자세한 풀이법을 적기는 힘드네요. 문제는 주어진 범위안의 복소수를 \(i-1\) 진법으로 표현했을 때, 1의 갯수의 총 합입니다. 복소수에 보면, 정수가 계수인 복소수들이 자연수의 소수처럼 취급될 수 있는 것들이 있습니다. 이것들을 일반적으로 가우스 소수라고 합니다. 가우스 소수는 몇가지 법칙이 있는데요. 기본적으로 자연수의 소수에서 갈라지게 됩니다. 자연수의 소수 중 \(4k+3\) 형태의 소수는 자체로 가우스 소수가 됩니다. 즉, 3, 7, 11, 19, .. 등입니다. 그 외의 자연수 소수들은 모두 복소수 형태의 가우스 소수로 나누어지게 됩니다. 예를 들어서 소수 2는 \( \pm 1 \p.. 2015. 5. 2.
510. 프로젝트 오일러 #510 : 원의 접선 중학수학 시절에 기하가 나오면, 보조선만 잘 그리면, 기하 문제는 왠만하면 풀린다는 것이죠. 이 문제도 역시 보조선을 잘 그리면 될거라고 생각합니다. 보조선을 그린 이미지를 보시면, 원 A에서 선 L에 수선을 내리고, 원B에서 선 L에 수선을 내리고, 원 A의 중심에서 L과 편행하고 선을 긋고, 원 C의 중심에서 L과 평행하게 선을 긋습니다. 그러면 그림과 같이 A, B, C 라는 삼각형을 얻습니다. 이 문제의 풀이는 바로 이 세개의 직각삼각형에서 출발합니다. 직각삼각형이므로 당연히 피타고라스 법칙이 성립합니다. 그런데, 삼각형 A의 밑변, 삼각형 B의 밑변, 삼각형 C의 밑변이 자연수라고 생각할 수 있는 근거가 그림상에는 전혀 없습니다. 당연히 A, B의 밑변의 합은 C의 밑변의 길이와 같다는 것은 알.. 2015. 4. 22.
40. 프로젝트 오일러 #40 : 챔퍼나운 수 챔퍼나운수는 수론에서 무리수이자 초월수인 상수를 정의한 것입니다. 십진법이라면, 1, 2, 3, 4, 5, ... 를 세듯이 소수점 이하에 배열을 한 것입니다. 10진법 챔퍼나운 수는 다음과 같습니다. 이번 프로젝트 오일러 문제는 챔퍼나운 수의 소수점 아래 k번째 숫자를 계산하는 것입니다. 문제 자체가 소수점 아래 백만번째 숫자를 물어보는 것만큼, 챔퍼나운 수를 생성해서 표현하는 것은 의미가 없습니다. 사실 현재 컴퓨터에서 사용하는 어떤 자료형을 사용하더라도 소수점 이하 백만번째 숫자를 표현할 수 있지는 않습니다. 백만 자리의 숫자는 3백3십만비트 이상을 사용해야 하죠. 바이트로 따지면 4십만바이트정도가 필요합니다. 수식으로 바로 계산할 수도 있겠지만, 그것을 계산하기보다는 제 경우에는 for 루프를 이.. 2015. 4. 21.
39. 프로젝트 오일러 #39 : 길이가 정수인 직각삼각형 난이도 5% 문제입니다. 이번 문제는 피타고라스 삼각형 문제네요. 직각삼각형의 길이가 정수로 나오는 것을 피타고라스 삼각형이라고 하는데요. 피타고라스 삼각형은 이미 공식화되어서 잘 나와 있습니다. 일단 피타고라스 삼각형의 원시근에 대해서 알아야 합니다. 세변의 길이를 a, b, c 라 하고, 직각의 대변의 길이를 c 라고 한다면, 우리가 잘 알고 있는 피타고라스 법칙이 나옵니다. 위 식을 만족하는 순서쌍 가 있다면, 어떤 상수 c에 대해서 도 피타고라스 법칙을 만족하게 됩니다. 피타고라스 삼각형의 원시근은 순서쌍이 서로 소인 수를 말합니다. 이러한 순서쌍을 만드는 생성법칙은 아주 간단합니다. 그리고 이 생성법칙은 프로젝트 오일러 문제들 중에 활용할 경우가 아주 많습니다. 두 수 m, n에 대하여,1. (.. 2015. 4. 20.
728x90