#include <bits/stdc++.h>
using namespace std;
//최대공약수 -> 유클리드 호제법
int GCD(int a, int b) {
return b ? GCD(b, (a%b)) : a;
}
//최소공배수 -> a*b == GCD(a,b) * LCM(a,b)
int LCM(int a, int b) {
return a * b / GCD(a, b);
}
int main() {
int n, m;
cin >> n >> m;
cout << GCD(n,m) << "\n" << LCM(n,m);
return 0;
}
최대공약수 : 약수 중 가장 큰 값
최소공배수 : 배수 중 가장 작은 값
[최대공약수 - GCD]
예 : 1112, 417
큰 수를 작은 수로 나눈 나머지를 구한다
1112 mod 695 = 417
나눴던 수와 나머지를 MOD 연산한다
695 mod 417 = 278
반복
417 mod 278 = 139
278 mod 139 = 0
나머지가 0이 됐을 때,
마지막 계산에서 나누는 수로 사용된 139
가 1112와 695의 최대공약수가 됨
int GCD(int a, int b){
int tmp;
while(b){ //b가 0이 될 때까지
tmp = a % b;
a = b;
b = c;
}
return a;
}
-- 재귀함수
int GCD(int a, int b){
return b ? GCD(b, a % b) : a;
}
[최소공배수 - LCM]
int LCM(int a, int b) {
return (a * b) / GCD(a, b);
}