두 수 A와 B의 최대공약수는 A % B(A를 B로 나눈 나머지)와 B의 최대공약수와 같다는 것을 이용한다.
이 과정을 반복해서 B = 0이 되면, 그 때의 A가 두 수의 최대공약수이다.
A = 56, B = 42의 최대공약수를 구해야 한다.
A % B를 구한다:
이제 A = B, B = A % B로 초기화 한다.
다시 나머지를 구한다.
B = 0이 되었으므로, 현재의 A = 14가 최대 공약수가 된다.
public static int gcd(int a, int b) {
while (b != 0) { // 나머지가 0이 될 때까지 반복
int temp = b; // 현재 b를 저장
b = a % b; // a를 b로 나눈 나머지로 b를 업데이트
a = temp; // a는 이전 b로 업데이트
}
return a; // 마지막에 남은 a가 최대공약수
}
유클리드 호제법을 사용하여 최소공배수를 구할 수 있다.
두 수 A와 B에 대해, 최소공배수는 다음과 같다.
A와 B의 최소공배수 = A x B % A와 B의 최대공약수
A = 56, B = 42의 최소공배수 구해야 한다.
A % B를 구한다:
이제 A = B, B = A % B로 초기화 한다.
다시 나머지를 구한다.
B = 0이 되었으므로, 현재의 A = 14가 최대 공약수가 된다.
A * B를 구한다.
2352를 최대공약수인 14로 나눈다.
A와 B의 최소공배수는 168이 된다.
import java.util.Scanner;
public class Main {
// 최대공약수(GCD) 계산 (유클리드 호제법 사용)
public static int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 최소공배수(LCM) 계산
public static int lcm(int a, int b) {
return (a * b) / gcd(a, b); // 두 수의 곱을 최대공약수로 나눔
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter two numbers: ");
int n = sc.nextInt();
int m = sc.nextInt();
// 출력
System.out.println("GCD: " + gcd(n, m));
System.out.println("LCM: " + lcm(n, m));
}
}
최대공약수는 유클리드 호제법을 사용하여, 큰 수와 작은 수를 나눈 나머지를 구한 후 작은 수는 큰 수로, 나머지는 작은 수로 설정하는 과정을 반복한다.
이후 최종적으로 남은 수가 최대공약수가 된다.
최소공배수는 유클리드 호제법을 사용하여 최대공약수를 구한다.
이후 두 수를 곱한 후 최대공약수로 나누면 최소공배수가 된다.
감사합니다. 😌