본문 바로가기

코딩테스트 연습/Baekjoon

[Baekjoon] 1934번: 최소공배수 (C++)

https://www.acmicpc.net/problem/1934

 

1934번: 최소공배수

두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있

www.acmicpc.net

2609와 거의 동일 두 자연수 a b를 비교하여 더 큰수만큼 for문을 반복한다.
a%i 와 b%i 나머지가 둘다 0일때의 i를 모두 곱하면 최대공약수이고,
a=a/i 와 b=b/i 를 해서 더 큰 최대공약수가 나오지 않으면, 그때 a 와 b 와 최대공약수를 곱하면 최소공배수이다.

코드

//1934
#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    
    int a,b, test;
    cin>> test;
    int large;
    
    for(int t=0;t<test;t++){
    cin >> a >> b;
    int min = 1;
    int max = 1;
    
    if(a > b) large = a;
    else large = b;
    
    for(int i=2;i <= large;i++){
        if((a % i ==0) && (b % i == 0)){
            a = a / i;
            b = b / i;
            min = min * i;
            i--;
        }
    }
    max = min * a * b;
    cout << max << "\n";
        
    }
    return 0;
}