본문 바로가기
반응형

Programming/Project Euler112

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.
38. 프로젝트 오일러 #38 : 팬디지털 곱하기 난이도 5%에 해당하는 문제입니다. 이번 문제는 1부터 9까지의 숫자를 한번씩만 사용하는 문제입니다. 192라는 숫자를 예를 들자면, 192x1 = 192192x2 = 384192x3 = 576 이 되어서, 곱하기 결과 192, 384, 576의 숫자들을 합치면, 1부터 9까지 오직 한번씩만 사용된 팬디지털을 이룹니다. 이와 같은 숫자를 찾는 것이 이번 문제입니다. 최대값을 찾으라는 것이기 때문에, 4자리 숫자부터 차례대로 찾아서 x2 한 값과 원래의 값이 팬디지털을 이루는지만 검사하면 됩니다. 프로그램은 간단합니다. bool IsPandigitalMultiply(int n) { unsigned short s = 0; for( int i = 1 ; ; i++ ) { int t = n*i; while( t.. 2015. 4. 20.
728x90