ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 최대 공약수와 최소 공배수
    Knowledge/Math 2019. 9. 5. 21:29
    반응형

    - 최대 공약수

     

    최대공약수란 두수 A와 B의 공통된 약수 중에서 가장 큰 정수이다

     

    최대 공약수를 구하는 가장 쉬운 방법은 2부터 A와 B중 작은 수 까지의 모든 정수로 두 수를 나누어 보는 것이다.

    코드로 구현해보면 아래와 같다

     

    1
    2
    3
    4
    5
    6
    int g = 1;
    for(int i = 2; i <= min(a,b); i++) {
        if(a % i == 0 && b % i ==0){
            g = i;
        }
    }

     

     

    이렇게 하면 g는 공약수를 만날 때 마다 바뀌겠지만

    어차피 2부터 A와 B중 작은 수 까지 해당 연산을 반복하니 최종적으로 G엔 가장 큰 공약수가 저장되게 되어 있다

     

    ( 물론 최대공약수가 1로 그냥 나올 수도 있다. 이런 두수는 서로소라고 한다 )

     

    이 연산의 시간복잡도는 N을 max(a,b)로 했을때 O(N)과 같다

     

    나쁜 방법은 아니지만 유클리드 호제법이란 걸 활용하면 더 빠르게 최대 공약수를 구할 수 있다.

     

    A를 B로 나눈 나머지를 r이라고 했을 때

    A와 B의 최대공약수는 B와 r의 최대공약수와 같다.

     

    따라서 B와 r의 나머지 연산을 해서 r이 0이 될 때의 B가 A와 B의 최대공약수이다.

     

    공식으로 표현하자면 GCD (a,b) = GCD(b, a%b) 이고 

    GCD(24,16) = GCD(16,8) = GCD (8,0) = 8 이다.

     

    코드로는 두가지 방식으로 표현할 수 있는데

    먼저 재귀함수를 활용하면 

     

    1
    2
    3
    4
    5
    6
    7
    int gcd(int a, int b) {
        if (b == 0) {
            return a;
        }else {
            return gcd(b, a%b);
        }
    }

     

    와 같이 표현할 수 있고 반복문을 활용해서도

     

    1
    2
    3
    4
    5
    6
    7
    8
    int gcd(int a, int b) {
        while (b != 0) {
            int r = a%b;
            a = b;
            b = r;
        }
        return a;
    }

     

    와 같이 표현할 수 있다

     

    이렇게 하면 시간 복잡도가 O(logN)으로 매우 짧아진다.

    그렇기에 최대 공약수를 구해야 할 일이 있으면 아래와 같은 방법은 활용하자

     

    - 최소 공배수

     

    최소공배수란 두 수의 공통된 배수 중에서 가장 작은 정수다.

     

    최소 공배수는 최대 공약수를 응용해서 구할 수 있는데

    두 수 A 와 B 를 곱한 값이 두 수의 최대 공약수와 최소 공배수를 곱한 값과 같기 때문이다.

     

    따라서 두 수의 최소공배수 = (A X B) / 최대공약수 의 공식을 활용해 구할 수 있다

    반응형

    'Knowledge > Math' 카테고리의 다른 글

    [이산수학 - 2강] 명제와 명제 논리 / 술어 논리와 추론  (0) 2020.05.17
    [이산수학 - 1강] 이산수학은 무엇이며 왜 배우는 걸까?  (0) 2020.05.17
    팩토리얼  (0) 2019.09.06
    소수  (0) 2019.09.06
    나머지 연산  (0) 2019.09.05

    댓글

Designed by Tistory.