티스토리 뷰
Programming
최대 공약수 구하기 (GCD / the greatest common divisor / Euclid 알고리즘 / Java)
혤혤혤 2017. 3. 6. 17:15Euclid 알고리즘을 사용하여 최대 공약수 구하기
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 |
댓글