https://www.acmicpc.net/problem/2609
# 최대공약수와 최소공배수
import math
a, b = map(int, input().split())
print(math.gcd(a, b)) # 최대공약수
print(math.lcm(a, b)) # 최소공배수
# 다른 풀이
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))
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로 나눠도 나누어떨어지는 수