Doby's Lab

Euclidean Algorithm Code(반복, 재귀) 본문

PS/Study Note

Euclidean Algorithm Code(반복, 재귀)

도비(Doby) 2022. 6. 18. 22:49

유클리드 호제법(Euclidean Algorithm)은 MOD 연산을 이용하여 두 수 간의 GCD(Greatest Common Divisior)를 빠르게 구하는 방법입니다.

 

코드로 구현하는 방법에도 반복과 재귀가 있습니다.

각 방법에 대하여 장단점이 있으며 두 방법 모두 MOD 연산을 사용하기 때문에 작은 수에서 큰 수로 MOD 연산을 하게 될 경우 알아서 swap이 되는 특징이 있으므로 따로 swap을 필요로 하지는 않습니다.

#include <iostream>
using namespace std;

int gcd1(int a, int b){
    int temp;
    while(b){
        temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int gcd2(int a, int b){ // recursive call이라 숫자가 크다면 메모리를 많이 먹는다.
    if(b == 0){
        return a;
    }
    else{
        return gcd2(b, a % b);
    }
}

int main(){
    int a, b; cin >> a >> b;
    cout << gcd1(a, b) << '\n';
    cout << gcd2(a, b) << '\n';
    
    return 0;
}
728x90

'PS > Study Note' 카테고리의 다른 글

Bitmasking 기본적인 연산  (0) 2022.07.17
Extended Euclidean Algorithm (증명 X)  (0) 2022.06.20
Coordinate Compression 연구일지  (0) 2022.06.05
Exponentiation By Squaring Code  (0) 2022.05.05
Sparse Table (희소 배열) 연구일지  (0) 2022.05.01