공부/알고리즘

[알고리즘+] 최대공약수, 최소공배수

줭♪(´▽`) 2021. 4. 27. 23:31

1. 최대공약수

최대공약수(GCD, Greatest Common Divisor) : 두 수의 공통된 약수 중 가장 큰 약수

'유클리드 호제법(Euclidean algorithm)'을 사용하면 효율적으로 구할 수 있음

 

[x와 y의 최대공약수를 구하는 법]

1) 자연수 x와 y에 대하여 x를 y로 나누어 r을 얻는다. (단, x > y일 때)

2) 다시 y를 r로 나누어 r2를 얻는다.

3) 이를 반복하다가 나머지 rn이 0이 되면 y가 최대공약수가 된다.

public static void main(String[] args) {
    int x = 72;
    int y = 30;
    
    int result = gcd(x, y);
}

public static int gcd(int x, int y) {
    if(y == 0)
        return x;
    else
        return gcd(y, x % y);
}

 

 

2. 최소공배수

최소공배수(LCM, Least Common Multiple) : 두 수의 공통된 배수 중 가장 작은 배수

최소공배수는 두 수를 곱한 값을 최대공약수로 나눈 것과 같음

public static void main(String[] args) {
    int x = 72;
    int y = 30;
    
    int result = x * y / gcd(x, y);
}

public static int gcd(int x, int y) {
    if(y == 0)
        return x;
    else
        return gcd(y, x % y);
}