[알고리즘] 유클리드 호제법

ChoRong0824·2023년 7월 21일
0

Algorithm

목록 보기
17/19
post-thumbnail

유클리드 호제법이란

두 수의 최대공약수를 구하는 알고리즘입니다.
보통 수리영역을 공부하셨을때, 소인수분해를 이용하여 공통된 소수들의 곱으로 표현하였지만, 컴퓨터에서는 해당 방법으로 구하는 것보다 좀 더 간결하게 유클리드 호제법으로 표현가능합니다.

핵심이론

MOD 연산이 최대 공약수를 구하는 핵심이라서, MOD 연산을 이해하고 있어야 합니다.

10 MOD 4 = 2 // 즉, 10 % 4 = 2

이해하기 어려우시다면, % 기호다. 라고 생각하셔도 무방합니다.

유클리드의 호제법은 3단계로 구현됩니다.

  1. 큰 수를 작으수로 나누는 MOD 연산 수행
  2. 결과값으로 MOD 연산 수행
  3. 나머지가 0이 되는 순간의 둘 중 작은 수를 최대 공약수로 선택

참고로,

예시

gcd(270,192)
270 % 192 = 78
	--> 192 % 78 = 36
    	--> 78 % 36 = 6
        	--> 36 % 6 = 0
            	--> 따라서, gcd(270,192) = 6 이 최대공약수.

code

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int x = Integer.parseInt(br.readLine());
		int y = Integer.parseInt(br.readLine());

		int result = GCD(x, y);
		System.out.println(result);

	}
    private static int GCD(int x, int y) {
		if(y == 0) 
			return x;
		else 
			return GCD(y, x % y);
	}
}

이미지 출처 해당 링크에서 고등학생 때, 배웠더 것들이 기억났다.

기억 나시나요 ? 해당 이미지를 보게되면, 파스칼의 삼각형을 볼 수 있습니다.
해당 문제 가끔씩 모의고사 봤을 때, 30번인가? 나왔던 것으로 기억나네요 ㅋㅋ 추억

profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글