Loading...

팩토리얼(factorial)의 소수 모듈로 곱셈의 역원(modulo inverse)을 구하는 기본적인 테크닉

이미 알고있는 것들인데 블로그에 정리가 안되어 있어서 1. n!을 소수 p로 나눈 나머지 소수 p에 대하여 $n! mod p$를 구하는 문제가 있다. 단 하나의 $n! mod p$를 구해야한다면... $n! = n*(n-1)*(n-2)*...*1$이므로, 1부터 n까지 $O(N)$에 다 곱한 다음, p로 나눈 나머지를 구하는 것이 간단하다. 하지만 n이 매우 크면서, 여러가지 n에 대한 $n! mod p$가 필요하다면 이야기가 달라진다. 여러가지 n에 대한 $n! mod p$가 필요하다면 가능한 모든 n에 대해 $n! mod p$를 구해놓고 O(1)로 접근하면 된다. 여기서 다이나믹 프로그래밍에 의해 이전에 구해놓은 값을 저장해둔다면, O(N)에 모든 n에 대해 $n! mod p$를 구할 수 있다. $n..

100부터 1000000000000000까지 모든 정수의 최대공약수는 어떻게 구할 수 있을까

SW Expert Academy SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com a이상 b이하의 모든 정수의 최대공약수를 구하는 문제 a,b는 1부터 $10^{100}$까지이다. 예를 들어 {70, 105, 42}의 최대공약수는... 70과 105의 최대공약수는 35이고, 35와 42의 최대공약수는 7이므로, 70,105,42의 최대공약수는 7이다. 그러면 gcd(a,a+1,a+2,...,b)를 구하는 문제인데 a,a+1의 최대공약수를 g라 하면 g,a+2의 최대공약수 g, g,b의 최대공약수를 구하면 된다. 그런데 a,b가 최대 $10^{100}$이므로, 이렇게 구하면 시간초과 날것이다 https://deep..

2024. 2. 7. 23:18

페리 수열(farey sequence) 조금 더 깊게3 - 주어진 수의 다음 항을 찾는 방법 -

1. n번째 페리수열의 i번째 항이 주어질 때 i+1번째 항을 찾는 방법 n번째 페리 수열의 한 원소 $\frac{a}{b}$가 주어졌다고 하자. 이 수보다 크면서 이웃한 바로 다음 항 원소를 구할 수 있을까? 예를 들어 $\frac{2}{5}$ 바로 다음 항에 존재하는 분모가 6이하인 기약분수를 찾으라한다면, $\frac{1}{2}$가 답이다. n번째 페리수열에서 $\frac{a}{b}$와 $\frac{c}{d}$가 서로 이웃하다면, bc - ad = 1이다. 이때 b와 a를 알기 때문에 bx - ay = 1을 만족하는 서로소인 정수 x,y를 구하는 문제이다. https://deepdata.tistory.com/576 확장된 유클리드 알고리즘(extended euclidean algorithm) 구현해..

2024. 2. 7. 03:43

페리 수열(farey sequence) 조금 더 깊게2 - 페리 수열의 대칭성과 페리 수열의 합 -

1. 페리 수열의 대칭성(symmetry) n번째 페리 수열의 분수 $\frac{a}{b}$에 대해 생각해보자. 먼저 기약분수이므로 a,b가 서로소이고 0과 1 사이에 있으므로 a < b이다. https://deepdata.tistory.com/1104 페리 수열(farey sequence) 조금 더 깊게1 - 페리 수열의 길이 - 1. 페리 수열의 길이 n번째 페리 수열은 분모가 n 이하인 0과 1 사이의 모든 기약분수를 오름차순으로 나열한 것이다. 기약분수가 무엇인가? $\frac{a}{b}$가 기약분수라면 a와 b가 서로소라는 뜻이다. deepdata.tistory.com 이전에 관찰했던 것처럼 n번째 페리 수열에는 분모가 n 이하인 정수 b에 대하여 b보다 작은 서로소인 모든 정수 a에 대해 $\..

2024. 2. 7. 02:18

페리 수열(farey sequence) 조금 더 깊게1 - 페리 수열의 길이 -

1. 페리 수열의 길이 n번째 페리 수열은 분모가 n 이하인 0과 1 사이의 모든 기약분수를 오름차순으로 나열한 것이다. 기약분수가 무엇인가? $\frac{a}{b}$가 기약분수라면 a와 b가 서로소라는 뜻이다. 이때, 0과 1 사이에 존재하는 기약분수이므로 a < b이다. 그러므로 n번째 페리수열에 존재하는 기약분수들은 다음과 같이 만들수도 있다. "양 끝에는 $\frac{0}{1}, \frac{1}{1}$이 있고, 분모가 b = 2,3,4,5,..,n에 대하여 분자는 k보다 작으면서 서로소인 모든 정수 a에 대해 $\frac{a}{b}$를 나열한 것이다." 예를 들어, 5번째 페리 수열을 보자. 분모가 2이면 2와 서로소인 1에 대해 $\frac{1}{2}$ 분모가 3이면 3과 서로소인 1,2에 대해..

2024. 2. 7. 00:02

페리 수열(Farey sequence) 문제를 해결하기 위해 알아야 할 기본 성질 간단하게

1. n번째 페리 수열 0부터 1사이의 분모가 n이하인 모든 기약분수를 오름차순으로 나열한 수열 n = 1부터 8까지의 경우를 나열하면 다음과 같다. 2. 두 분수 사이에 있는 분수 theorem1) 0과 1 사이의 두 분수 $\frac{a}{b}$와 $\frac{c}{d}$에 대하여 $\frac{a}{b} 0$이다. 그런데 $$\frac{a+c}..