기록

[Level 1] 최대공약수와 최소공배수 본문

Algorithm/Programmers

[Level 1] 최대공약수와 최소공배수

dev.jung 2021. 7. 12. 16:00

문제

 

내 풀이

유클리드 호제법 

 

유클리드 호제법(- 互除法, Euclidean Algorithm)은 2개의 자연수 또는 정식(整式)의 최대공약수(Greatest Common Divisor)를 구하는 알고리즘의 하나이다.

호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다.

2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.

이는 명시적으로 기술된 가장 오래된 알고리즘으로서도 알려져 있으며, 기원전 300년경에 쓰인 유클리드의 《원론》 제7권, 명제 1부터 3까지에 해당한다.

 

ex) 
2, 5 일경우
gcd(5, 2);

5를 2로 나눈 나머지 1
gcd(2, 1);

2 를  1로 나눈 나머지 0
gcd (1, 0)
m === 0 이므로  1 인  n 리턴 최대공약수는  1


최소 공배수 =  n * m / 최대 공약수 

 

function solution(n, m) {
    const big = n > m ? n : m;
    const small = n < m ? n : m;
        
    return [gcd(big, small), n * m / gcd(big, small)];
}

function gcd(n, m) {
     if (m == 0) {
        return n;   
     }
    
    return gcd(m, (n % m));
}

 

츨처

https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95

반응형

'Algorithm > Programmers' 카테고리의 다른 글

[Level1] 제일 작은 수 제거하기  (0) 2021.07.13
[Level1] 짝수와 홀수  (0) 2021.07.13
[Level 1] 평균 구하기  (0) 2021.07.12
[Level1] 하샤드 수  (0) 2021.07.12
[Level1] 핸드폰 번호 가리기  (0) 2021.07.12
Comments