정수론이란?
소수, 약수, 배수, 나머지, 합동식, 디오판틴 방정식 등을 다루며, ‘수학의 왕자’ 가우스가 극찬했을 정도로 고대부터 이어져 온 가장 근본적인 학문
GCD와 확장 유클리드 알고리즘
최대공약수(GCD)
최대 공약수는 둘 이상의 수를 구성하는 수들중 공통적으로 들어가는 구성요소의 수 중 가장 큰 수를 의미합니다.
GCD(80,40) = 40
이떄 소인수 분해를 이용하면 쉽게 구할 수 있지만 컴퓨터 세상에서는 O(log N)의 시간 복잡도를 가진 해당 알고리즘은 조금 오래 걸릴수 있습니다.
유클리드 알고리즘
이때 유클리드 알고리즘을 활용하면 해당 수를 빠르게 구할 수 있는데요. 유클리드 알고리즘은 2가지 알고리즘을 가정하고 진행하겠습니다.
- a > b인 양의 정수 a,b에 대하여 a를 b로 나눈 나머지를 r로 정의하면, a,b의 최대공약수와 b,r의 최대공약수는 동일하다.
- a > 0 일때, a, 0의 최대공약수는 a로 정의된다.
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b);확장 유클리드 알고리즘
def xgcd(a, b):
if b == 0:
return a, 1, 0
g, x1, y1 = xgcd(b, a % b)
x = y1
y = (g - a * x) // b
assert a * x + b * y == g
return g, x, y합동식과 중국인의 나머지 정리
합동(Congruence)
두 정수 a, b를 각각 양의 정수 m으로 나머지가 동일한 경우 “a, b를 m에 대하여 합동”