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

반영서·2023년 1월 12일
0

알고리즘

목록 보기
5/8
post-thumbnail

유클리드 호제법이란?

유클리드 호제법이란, 2개의 자연수 또는 정식의 최대공약수를 구하는 알고리즘의 하나이다.

호제법이란?

호제법이란, 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘이다.

출처: 위키피디아


최대공약수

2개의 자연수 a와 b의 나머지를 r이라고 하자.

이때, a와 b의 최대공약수 == b와 r의 최대공약수가 성립된다.

이를 반복하다가, b와 r의 나머지가 0이 나올 때 그 수가 최대공약수가 된다.

최소공배수

a와 b의 최소공배수 = a * b / a와 b의 최대공약수


관련문제

[ 프로그래머스 ] 최대공약수와 최소공배수

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

제한 사항

  • 두 수는 1이상 1000000이하의 자연수입니다.

입출력 예

nmreturn
312[3, 12]
25[1, 10]



입출력 예 설명

입출력 예 #1위의 설명과 같습니다.

입출력 예 #2자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.

문제 출처: 프로그래머스



솔루션

#include <string>
#include <vector>

using namespace std;

int gcd(int x, int y) { return x % y == 0 ? y : gcd(y, x % y); }
int lcm(int x, int y) { return x * y / gcd(x, y); }

vector<int> solution(int n, int m) {
    vector<int> answer;
    answer.push_back(gcd(n, m));
    answer.push_back(lcm(n, m));
    
    return answer;
}

최대공약수와 최소공배수를 리스트에 푸쉬하고 출력하는 간단한 문제였다.

profile
커지고 싶은 신입개발자

0개의 댓글