문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

 

방법 1. 1씩 증가/감소하면서 최소공배수/최대공약수 찾기

#include <iostream>

using namespace std;

int main()
{
    int a,b, s1, s2;
    cin >> a >> b;
    if(a>b){
        s1 = b;
        s2 = a;
    }else{
        s1 = a;
        s2 = b;
    }
    for(int i=s1; i>0; i--){
        if(a%i==0 && b%i==0){
            printf("%d\n", i);
            break;
        }
    }
    for(int i=s2; i<987654321; i++){
        if(i%a==0 && i%b==0){
            printf("%d\n", i);
            break;
        }
    }

    return 0;
}

 

 

방법 2. 유클리드 호제법을 이용하여 최대공약수/최소공배수 찾기

#include <iostream>

using namespace std;

int get_gcd(int a, int b){
    int mod;
    while(b){
        mod = a % b;
        a = b;
        b = mod;
    }
    return a;
}

int get_lcm(int a, int b, int gcd){
    return a * b / gcd;
}

int main()
{
    int a,b,gcd,lcm;
    cin >> a >> b;
    gcd = get_gcd(a,b);
    lcm = get_lcm(a,b,gcd);
    printf("%d\n%d",gcd, lcm);
    return 0;
}

'알고리즘 문제풀이' 카테고리의 다른 글

[백준] 10816 숫자 카드 2 c++  (0) 2022.02.08
[백준] 9012번 괄호 c++  (0) 2022.02.06
[백준] 1920번 수 찾기 c++  (0) 2022.02.04
[백준] 1259번 팰린드롬수 c++  (0) 2022.02.04
[백준] 2475번 검증수 c++  (0) 2022.02.04

+ Recent posts