본문 바로가기

Programming456

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.
[C/C++] 프로젝트 오일러 #40 : 챔퍼나운 수 문제 요약 챔퍼나운 수는 0.123456789101112131415… 와 같이 자연수를 차례대로 이어붙여서 만든 무리수입니다. 문제에서는 이 상수에서 특정 위치에 있는 숫자들을 찾아 곱한 값을 구하는 것이 요구됩니다. 예를 들어, 소수점 아래 1번째 자리의 숫자는 1, 2번째는 2, 10번째는 1과 같이 특정 위치에서 숫자를 확인할 수 있습니다. 이러한 방식으로 문제에서 요구하는 여러 개의 특정 위치에 있는 숫자들을 추출하고, 이들을 곱하여 최종적으로 그 값을 도출해야 합니다.챔퍼나운수는 수론에서 무리수이자 초월수인 상수를 정의한 것입니다. 십진법이라면, 1, 2, 3, 4, 5, ... 를 세듯이 소수점 이하에 배열을 한 것입니다. 10진법 챔퍼나운 수는 다음과 같습니다.\[ C_{10} = 0.123.. 2015. 4. 21.
[C/C++] 프로젝트 오일러 #39 : 길이가 정수인 직각삼각형 프로젝트 오일러 #39는 난이도 5% 문제로 어렵지 않은 문제입니다.  제목에서 알 수 있듯이 피타고라스 삼각형 문제입니다. 직각삼각형의 길이가 정수로 나오는 것을 피타고라스 삼각형이라고 하는데요.  피타고라스 삼각형은 이미 공식화되어서 잘 나와 있습니다. 일단 피타고라스 삼각형의 원시근에 대해서 알아야 합니다.  세변의 길이를 a, b, c 라 하고, 직각의 대변의 길이를 c 라고 한다면, 우리가 잘 알고 있는 피타고라스 법칙이 나옵니다. \[ a^2 + b^2 = c^2 \] 위 식을 만족하는 정수로 된 순서쌍 \( (x, y, z) \)가 있다면, 어떤 상수 c에 대해서 \( (cx, cy, cz) \)도 피타고라스 법칙을 만족하게 됩니다.   피타고라스 삼각형의 원시근은 순서쌍이 서로 소인 수를 .. 2015. 4. 20.
[C/C++] 프로젝트 오일러 #38 : 팬디지털 곱하기 Project Euler 문제 38번에서는 “팬디지털 수”와 “곱셈 연산”의 개념을 활용하여 특정 조건을 만족하는 가장 큰 수를 찾는 것이 목표입니다. 팬디지털 수란 각 숫자가 1부터 9까지 한 번씩만 등장하는 수를 의미합니다. 예를 들어, 192384576은 1부터 9까지의 숫자가 모두 포함되어 있으므로 팬디지털 수라고 할 수 있습니다. 문제에서는 특정 정수 n 과 정수 k 를 선택하여, \( n \times 1 \), \( n \times 2 \), \( n \times 3 \), …, \( n \times k \)로 만들어진 수를 이어붙였을 때 팬디지털 수가 되는지를 확인하도록 요구하고 있습니다. 또한, 이 과정에서 만들어질 수 있는 가장 큰 팬디지털 수를 구하는 것이 목표입니다. 예를 들어, n .. 2015. 4. 20.
728x90