728x90
◇ 설명
□ 정의, 특징
● 유클리드 호제법 ( Euclidean algorithm )
- 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나
- 호제법 : 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘
- 2개의 자연수 a, b (단, a > b)에 대해서 a를 b로 나눈 나머지를 r이라 하면,
a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여
나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.
◇ 코드
import java.util.Scanner;
public class Main_2609 {
public static int gcd(int a, int b) {
return a % b == 0 ? b : gcd(b, a % b);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1 = sc.nextInt(), n2 = sc.nextInt();
sc.close();
int a = n1 > n2 ? n1 : n2, b = n2 > n1 ? n1 : n2;
int gcd, lcm, r; // gcd : greatest common factor, lcm : Least Common Multiple, r : remainder
// way 1
gcd = gcd(a, b);
// way 2
while (true) {
r = a % b;
if (r == 0)
break;
a = b;
b = r;
}
gcd = b;
lcm = a * b / gcd;
System.out.println(gcd + "\n" + lcm);
}
}
반응형
'컴퓨터 공학 ( Computer Science ) > 알고리즘 ( Algorithm )' 카테고리의 다른 글
[알고리즘] 투 포인터 ( Two Pointer ) (0) | 2021.12.28 |
---|---|
[알고리즘][수학] 소수 구하기 - 에라토스테네스의 체, 소인수 분해 (0) | 2021.12.20 |
[알고리즘] 상호 배타적인 집합 처리 ( 유니온 파인드 : union-find ) (0) | 2021.12.07 |
[알고리즘] 위상 정렬 ( Topological Sort ) (0) | 2021.12.02 |
[알고리즘] CCW ( CounterClockWise ) (0) | 2021.12.01 |