반응형
정의

a = bx+r 일 때
(a,b) = (b,r)
a와 b의 최대공약수는 b와 a를 b로 나눈 나머지의 최대공약수와 같다. 이를 이용하여 반복하면 두 수의 최대공약수를 쉽게 구할 수 있다.
구현
파이썬 (Python)
def gcd(a,b): while b != 0: a, b = b, a%b return a
두 수에서 유클리드 호제법을 반복하여 최대공약수를 구하는 함수
def gcd(a, b): r = b % a if r == 0: return a return gcd(r, a)
재귀 함수를 이용한 구현
def gcd(*num_list): if len(num_list) == 1: return num_list[0] elif len(num_list) == 2: a, b = num_list[0], num_list[1] while b != 0: a, b = b, a%b return a else: return gcd(num_list[0], gcd(*num_list[1:]))
여러 수 이상일 경우 최대공약수를 구하는 함수. (a,b,c) = (a,(b,c))이기 때문에 재귀를 이용하여 반복해줌
자바스크립트 (Javascript)
function gcd(a,b){ while(b != 0){ var r = a%b; a = b; b = r; } return a }
C, C++
int gcd(int a, int b) { int r = a % b; if (r == 0) { return b; } return gcd(b, r); }
원리 및 증명
a = bq + r
G = (a, b)
G` = (b, r)
라 가정하자. 그러면 서로소인 A, B에 대해
a = GA, b = GB
GA = GBq + r
b=Gb, r=G(A-Bq)
G는 G`의 약수가 된다.
G` = mG
라 가정하면 서로소인 k,l에 대해
b = GB = G`k = Gmk
r = G(A-Bq) = G`l = Gml
양 변을 G로 나누면
B= mk
A-Bq = ml
정리하면
A = Bq+ ml = m(kq + l)
B = mk
m이 A와 B의 공약수가 된다. 하지만 A와 B는 서로소이므로 m=1, 따라서 G=G`
궁금한 내용이 있으면
화면 왼쪽 아래의 디스코드 아이콘을 누르면 실시간으로 답해드립니다.
(아이콘이 보이지 않는다면 에드 블록을 꺼주세요)https://discord.link/pseudodeveloper
또 위 링크를 눌러 가짜 개발자 서버에 들어오시면
블로그의 새 글 알림을 받고
SSAFY, 부스트캠프, 포유드림, 우아한테크코스, 프로그래머스와 같은
국비 지원 교육 일정을 자동 알림 받을 수 있습니다.
반응형
'📝 알고리즘 > 수학' 카테고리의 다른 글
🧮 부분 집합, 멱집합 구하기 알고리즘 직접 구현! (2) | 2023.01.10 |
---|---|
🧮 조합 알고리즘 직접 구현! (2) | 2023.01.10 |
🧮 순열 알고리즘 직접 구현! (0) | 2023.01.10 |
⚡ 고속 거듭제곱 알고리즘 간단설명! (0) | 2022.10.06 |
댓글