정수론
기반 지식
- 소수 : 약수가 1 또는 자기 자신인 수
- 서로소 : 두 정수의 공약수가 1
- 약수와 배수 :
a*b = c
->a|c
,b|c
로 나타냄, a의 배수인 c, b의 배수인 c 정도로 보면 될 듯 - 공배수 :
a|b c|b
라면b는 a, b의 공배수
가 됨 - 공약수 :
a|b a|c
라면a는 b, c의 공약수
가 됨
서론
- 정리 1
- m, n, c가 정수일 때
- c가 만약 m, n의 공약수이면
c|(m+n)
,c|(m-n)
가 성립함 c|m
이면c|m*n
임
- 정리 2
- 두 정수 a, b가 있을 때,
a = b*q + r
이면gcd(a,b) == gcd(b,r)
이다. - 증명
c를 a, b의 공약수로하고 했을 때
c|b*q
는 성립
c|a
와c|b*q
가 성립하니, 정리에 의해 c는 b, r의 공약수 (왜냐하면,b*q=a-r
이기 떄문에c|a, c|a-r(=b*q)
가 된다는 건 증명되어c|r
또한 성립
반대로c|r, c|b
이면c|b*q
,c|b*q+r
이 성립
즉, c는 a, b의 공약수임(= 위 정리에 의해c|a, c|b
이면c|b, c|r
)
그러므로a, b
의 공약수의 집합은b, r
의 공약수와 같음
gcd(a,b) == gcd(b,r)
- 두 정수 a, b가 있을 때,
유클리드 알고리즘
- 정리 2에 근거해서 gcd를 빠르게 찾는 알고리즘
a = b*q + r
인경우gcd(a, b) == gcd(b, a mod b)
예
gcd(385, 175)
gcd(175, 35)
gcd(35, 0)
= 35의사코드
while(b > 0) {
}
return a;