유클리드 호제법

조영민·2023년 5월 3일
0

알고리즘

목록 보기
1/5
post-custom-banner

유클리드 호제법은 두 개의 수가 주어졌을 때, 최대공약수를 구하는 알고리즘 이다.

일반적으로 두 수 사이의 공약수를 구할때 소인수 분해를 하고 소인수들의 곱으로 최대 공약수를 구할 수 있었다.

하지만, 이것을 코드로 구현한다면 효율적이지 않을 것이다.

만약 주어진 수의 크기가 크다면 시간 복잡도는 계속 증가할 것이다.

유클리드 호제법 알고리즘을 사용한다면 이 문제를 쉽게 해결할 수 있다.

유클리드 호제법의 기본개념은 두 개의 수 A,B에 대해 (A>B)라면 A를 B로 나눈 나머지 C라고 가정한다.

이때, A와 B의 최대 공약수는 B와 C의 최대 공약수와 같다. 이러한 알고리즘 특징을 이용해 C가 0이 될 때의 나누는 수가 최대 공약수가 된다.

public class programmers_level1_27 {
    static int educ(int a, int b){
        int r = a % b;         //큰 숫자를 작은 수로 나눈 나머지 계산
        if(r == 0) return b;   //나머지가 0이면 작은숫자가 최대공약수 이므로 리턴
        else return educ(b, r);//나머지가 0이 아니면 재귀로 리턴
    }

    public static int[] solution(int n, int m) {
        int[] answer = new int[2];
        int r = educ(Math.max(n,m), Math.min(n,m));

        answer[0] = r;
        n = n/r;
        m = m/r;
        answer[1] = n * m * r;   // 두 수의 최소공배수 = 두 수의 최대 공약수 * 위에서 구한 몫
        return answer;
    }
}
profile
노젓는 개발자
post-custom-banner

0개의 댓글