유클리드 호제법을 이용한 방식이다.
a-bq가 서로소인 이유는 귀류법을 사용하여 증명하면 된다. 둘 사이에 공약수 p가 있다고 가정하고 진행하면 a,b가 공약수를 가지면서 모순이 된다.
LCM은 더욱 간단하다. 최소 공배수이기때문에 서로소인 a,b를 모두 갖고 있어야하고 a와 b에도 서로소인 d또한 갖고 있어야 한다.
즉 최소공배수는 a*b*d가 된다.
코드를 보면 다음과 같다.
public static int gcd(int a, int b){
if(b == 0) return a;
return gcd(b, a % b);
}
gcd코드이다. 두 숫자를 받아 나머지를 찾는 방식으로 진행된다. 그러다 나머지가 나오지 않는 -> 즉 공약수가 처음 생기는 지점에서 그 값을 반환시키며 재귀 함수 호출을 마친다.
public static int lcm(int x, int y) {
//0이 아닌 두 수의 곱 / 두 수의 최대공약수
return (x * y) / gcd(x, y);
}
LCD의 경우에 두 수의 곱을 먼저 구해준다. 이 경우 a*b*d*d가 되기 때문에 gcd를 통해 두 수의 최대 공약수를 한번 나누어 계산을 마친다.
'문제 풀이 > 도구정리' 카테고리의 다른 글
[도구정리] 투포인터 (0) | 2024.10.06 |
---|---|
[도구정리] 코딩 테스트 문법 정리(JAVA) (0) | 2024.04.24 |
[도구정리] 에라토스테네스의 체 (0) | 2024.04.13 |
[도구정리] 사방탐색 (0) | 2024.04.08 |
[도구정리] DFS, BFS (0) | 2024.04.08 |