백준 알고리즘 기초 강좌
4장 수학 - (2) 최대공약수
살구르
2017. 9. 25. 17:20
1. 최대공약수(Greatest Common Divisor)
-최대공약수는 줄여서 GCD라고 쓴다.
-두 수 A와 B의 최대공약수 G는 A와 B의 공통된 약수 중에서 가장 큰 정수이다.
-최대공약수를 구하는 가장 쉬운 방법은 2부터 min(A,B)까지 모든 정수로 나우어 보는 방법
-최대공약수가 1인 두 수를 서로소(Coprime)이라고 한다.
(코드)
int g=1;
for(int i=2;i<=min(a,b);i++){
if(a%i == 0 && b%i == 0)
g=i;
}
=> 시간복잡도 O(N)
-위의 방법보다 빠른 방법이 있다. => 유클리드 호제법(Euclidean Algorithm)
2. 유클리드 호제법
-a를 b로 나눈 나머지를 r이라고 했을 때,
gcd(a,b)=gcd(b,r)
-r이 0이면 그 때 b가 최대 공약수이다.
ex) gcd(24,16)
gcd(24,16)=gcd(16,8)=gcd(8,0)=8
(코드)
-재귀 함수 사용
int gcd(int a, int b){
if(b==0)
return a;
else{
return gcd(b,a%b);
}
}
-재귀 함수 미사용
int gcd(int a, int b){
while(b!=0){
int r = a%b;
a=b;
b=r;
}
return a;
}
3. 세 수의 최대공약수
gcd(a,b,c) = gcd(gcd(a,b),c)
-네 수, N개의 숫자도 위와 같은 식으로 계속해서 구할 수 있다.