개발자로/공부

유클리드 호제법, 최대 공약수 알고리즘

ReasonyB 2022. 8. 24. 18:22

점화식

유클리드 호제법을 통해 수 A, B의 최대 공약수를 구하는 과정은 다음과 같다.

A > B일 때, (Q0는 몫, R0는 나머지)

A = Q0 * B + R0

B = Q1 * R0 + R1

R0 = Q2 * R1 + R2

...

Rn = Q(n+2) * R(n+1) + R(n+2) 일 때, R(n+2)가 0 이라면, A와 B의 최대공약수는 R(n+1)이다.

 

알고리즘(C++)

#include <iostream>
using namespace std;

int euclid(int  A, int B){
 if(A%B == 0) return B;
 else return euclid(B, A%B);
}

int main(){
 cout<< "수 2개 입력 >>";
 int A,B;
 cin>>A;
 cin>>B;
 
 if(A<B){ //큰 수를 A로 두기 위해 swap
  int temp = A;
  A = B;
  B = temp;
 }
 
 cout<<"최대 공약수: "<<euclid(A, B)<<endl;
 return 0;
}