[백준 2609 파이썬, 자바] 최대공약수와 최소공배수

일단 해볼게·2022년 10월 25일
0

백준

목록 보기
33/132

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

python

# 최대공약수와 최소공배수

import math

a, b = map(int, input().split())

print(math.gcd(a, b)) # 최대공약수
print(math.lcm(a, b)) # 최소공배수

다른풀이 python

# 다른 풀이
a, b = map(int, input().split())

def gcd(a, b): # 최대공약수
    while b > 0:
        a, b = b, a % b
    return a

def lcm(a, b): # 최소공배수
    return a * b // gcd(a, b)

print(gcd(a, b))
print(lcm(a, b))

Java

import java.io.*;
import java.util.*;

public class Main {
    private static void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()); // 문자열 분리 (split 역할)
        StringBuilder sb = new StringBuilder();

        int a = Integer.parseInt(st.nextToken()); // 처음 문자
        int b = Integer.parseInt(st.nextToken()); // 두번째 문자

        sb.append(gcd(a, b)).append("\n").append(lcd(a, b));
        System.out.println(sb);

        br.close();
    }

    private static int lcd(int a, int b) { // 최소 공배수
        return a * b / gcd(a, b);
    }

    private static int gcd(int a, int b) { // 최대 공약수
        while (b != 0) {
            int r = a % b;
            a = b; // 나누는 값
            b = r; // 나눈 나머지
        }
        return a;
    }
    public static void main(String[] args) throws Exception {
        solution();
    }
}

유클리드 호제법에 의해서 최대공약수와 최소공배수를 구할 수 있다.

최대공약수

a와 b의 최대공약수 G는 b와 a%b(a를 b로 나눈 나머지)의 최대공약수 G'와 서로 같다!
예시) gcd(24, 18) = gcd(18, 6) = gcd(6, 0)

최소공배수

a*b / gcd(a, b)를 해주면 최소공배수가 된다!
gcd(a, b) : 이 수를 A로 나눠도 나누어 떨어지고 B로 나눠도 나누어떨어지는 수

참고
https://suri78.tistory.com/36

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글