알고리즘 연습

[ 수학 ] 최대공약수와 최소공배수 연습하기 JAVA

코딩하는 너구리 2019. 10. 16. 03:11
반응형

 

문제

 

 

 

 

 

풀이

 

 

최소공배수, 최대공약수를 구하는 연습을 백준 2609번 문제를 통해 연습해보도록 하겠습니다.

문제 풀이는 유클리드 호제법을 이용하였습니다.

 

https://namu.wiki/w/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C%20%ED%98%B8%EC%A0%9C%EB%B2%95

 

유클리드 호제법 - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권을 갖습니다. 나무위키는 백과사전이 아니며 검증되지 않았거나, 편향적이거나, 잘못된 서술이 있을 수 있습니다. 나무위키는 위키위키입니다. 여러분이 직접 문서를 고칠 수 있으며, 다른 사람의 의견을 원할 경우 직접 토론을 발제할 수 있습니다.

namu.wiki

 

간단히 보면 a와 b 두 수에 대하여 유클리드 호제법을 사용한다고 하면

a를 b로 나눈 나머지를 N 이라고 했을 때

a와 b의 최대공약수는 --> b와 N 의 최대공약수와 같게 된다는 설명입니다. 

                    GCD ( a, b ) ==  GCD ( b, N )

 

이해 하기 쉽게 두 수 a, b  를 20과 12로 잡아보겠습니다.

       a 를 b로 나눈 나머지 8을 N 으로 둔다면  a = 12 , b = 8이 됩니다.

계속해서 이는 곧   a = 8  ( 이전의 b ) ,   b =  4 ( 12를 8로 나눈 나머지 )

마지막으로 a = 4, b = 0 이 되고 ,      b가 0이 될 때의 a값 ( = 4 ) 이 두 수의 최대 공약수입니다.

 

            GCD ( 20 , 12 )  ==>  GCD ( 12 , 8 )    ==>   GCD (  8 ,  4 )   ==>    GCD ( 4,  0 )

※ 20과 12의 최대 공약수는 4가 됩니다.

 

코드에서는 반복되는 이 과정을 while 반복문으로 처리해주었습니다.

초기값 a와 b를 최소공배수를 구할 때 다시 사용하기 위해서 GCD 연산과정은 c와 d를 이용하였습니다.

여기에서 d가 0이 될 때의 c 값을 이용하여 최대 공약수를 구해주었고

 

 

최소공배수는 a와 b 각각의 수를 최대공약수인 c로 나눈 뒤에 곱해주면 됩니다.

                    4 *  ( 20 / 4 )  *  ( 12 / 4  ) ==>   4  *  5  *  3   =  60

 

 

 

코드

 

 

 

 

출처

 

https://www.acmicpc.net/problem/2609

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를,둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

 

반응형