백준/BRONZE
[백준 2609번][C++] 최대 공약수와 최소 공배수
퍼펙트코딩
2022. 7. 16. 22:05
728x90
반응형
유클리드 호제법을 이용한 최대공약수와 최소공배수 구하기
코드는 어렵게 적어놓았지만 기본 개념은 상당히 간단합니다!
두 수를 A와 B라고 했을때
A%B = 0 이라고 했을 때 A는 B의 배수이기 때문에 최대 공약수는 B입니다
이런 사실에 대해
A%B가 0이 아닌 C라고 가정했을 때
A와 B의 최대 공약수는 B와 C의 최대공약수와 같다는 원리가 유클리드 호제법입니다.
따라서 ? % ? = ? 의 기본식에서 나머지가 0이 될 때까지 값들을 업데이트 해준다면 쉽게 찾을 수 있습니다
또한 최소공배수와 최대공약수를 곱한 값은 두 수를 곱한 값과 동일합니다.
#include <iostream>
using namespace std;
//유클리드 호제법을 이용한 최대 공약수 구하기
int gcd(int n1, int n2) {
int mod_result = n1%n2;
while (mod_result !=0 ) {
n1 = n2;
n2 = mod_result;
mod_result = n1 % n2;
}
return n2;
}
int main() {
int num1, num2;
cin >> num1 >> num2;
//두 수의 최대공약수를 구함
int gcd_result = gcd(num1, num2);
//최소공배수는 두수를 곱한값에 최대공약수를 나누면 된다
cout << gcd_result << '\n' << num1 * num2 / gcd_result;
}
728x90
반응형