티스토리 뷰

Euclid 알고리즘을 사용하여 최대 공약수 구하기 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Euclid{
 
    // division-based version
    public int getGCD1(int num1, int num2) {
        if(num1 * num2 < 0){
            return -1;
     } 
        while(num2 != 0){
               int temp = num2; 
               num2 = num1 % num2 ; 
               num1 = temp; 
        }
        return num1;
    }
  
    // subtraction-based version
    public int getGCD2(int num1, int num2) {
        if(num1 * num2 < 0){
            return -1;
        } 
        while(num1 != num2){
            if(num1 > num2) {
                  num1 = num1 - num2;
              } else {
                  num2 = num2 - num1;
              }
        } 
        return num1;
    }
  
    // recursive version
      public int getGCD3(int num1, int num2) {
        if(num1 * num2 < 0){
            return -1;
        } 
        if(num2 == 0){
            return num1;
        } else {
            return getGCD3(num2, num1 % num2);
        }
      }
  
    // print  
    public static void main(String[] args) {
        Euclid euclid = new Euclid();
        System.out.println("최대 공약수: " + euclid.getGCD1(96,360));
        System.out.println("최대 공약수: " + euclid.getGCD2(360,96));
        System.out.println("최대 공약수: " + euclid.getGCD3(360,96));
        System.out.println("최대 공약수: " + euclid.getGCD3(-360,96));
        System.out.println("입력값이 0보다 큰 정수가 아닐 경우 -1 반환");
  }
}
cs



시간 복잡도 O( log2(min(a, b)))

입력된 2개의 정수의 비트수를 n이라고 하면, 유클리드 알고리즘은 Θ(n) 회의 나눗셈으로 최대공약수를 구할 수 있다.


'Programming' 카테고리의 다른 글

분할정복 알고리즘  (0) 2017.03.07
시간복잡도  (0) 2017.03.06
Project를 git에 올리기 / .git dir 삭제  (0) 2017.02.08
[Tip] 브라우저 캐쉬 삭제 후 새로고침  (0) 2017.02.07
[gitHub] gitHub page 만들기  (0) 2017.01.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함