문 제

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

입 력

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

24 18

출 력

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

6
72

코 드

using System;
using static System.Console;
using System.Linq;

namespace algorithm
{
class Program
{
static void Main(string[] args)
{
int Max = 0;
int Min = 0;

            int[] num = ReadLine().Split(' ').Select(int.Parse).ToArray();

            Max = Gcd(num[0], num[1]);
            Min = (num[0] * num[1]) / Max;

            WriteLine(Max);
            WriteLine(Min);
        }

        static int Gcd(int a, int b)
        {
            int temp = 0;

            while (b != 0)
            {
                temp = a % b;
                a = b;
                b = temp;
            }

            return a;
        }
    }

}

비교코드 - 1

공 부

유클리드 호제법(Euclidean Algorithm)

  • 최대 공약수를(GCD) 구하기 위한 알고리즘!
  • 두 수 A, B가 주어졌을 때, 큰 수에서 작은 수를 빼고 한 쪽이 0이 될 때까지 계속해서 반복하는 알고리즘! (0 이전의 작은 수가 최대공약수)

번 외

  • 최대 공약수 (Greates Common Divisor : GCD)
  • 최소 공배수 (Least Common Multiple : LCM) -> (A x B) / 최대공약수