#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n; cin >> n;
long long a, b;
long long GCD, LCM;
for (int i = 0; i < n; i++) {
cin >> a >> b;
GCD = __gcd(a, b);
LCM = a * b / GCD;
cout << LCM << '\n';
}
}
이거 LCM 구하는 코드
a, b는 100만 이하의 자연수만 입력되는데
a, b를 int로 하면 오버플로가 나서 음수결과가 나옴
LCM은 int범위를 넘는다 쳐도 a, b 자체는 int범위 안인데도 int로 선언해버리면 오버플로를 발생시키는게 이해가 안되는데
이건 무슨 원리인지 잘 모르겠음...
a * b에서 오버플로우 날 듯 굳이 인트로 하고 싶으면 인트로 선언하고 (long long)a * b 해보셈 - dc App
LCM 구하는 과정에서 a * b가 int형으로 적용되느라 오버플로가 나는건가??
그져
GCD가 롱롱이니까 a/GCD*b 처럼 순서 바꿔도 될듯 - dc App
오ㅁㅊ