-
유클리드 호제법 - 최대 공약수 구하기쾌락없는 책임 (공부)/알고리즘 공부 2021. 6. 25. 11:17반응형
소스코드
#include <iostream> using namespace std; int gcd(int n, int m){ int temp; while(m){ temp = n%m; n = m; m = temp; } return n; }
최대 공약수를 구하는 O(log(n+m)) 알고리즘
기본 생각으로 알고리즘을 짜게 되면 nm의 시간 복잡도가 주어지게 됩니다. 1부터 계속해서 수를 검증해야 하기 때문에 테스트 케이스가 너무 많은 경우 시간이 너무 오래 걸려 문제를 풀 수 없게 됩니다.
조금 더 풀어쓰기
위 예시를 봤을 때 나머지가 0이 되는 연산에서의 분모가 최대 공약수가 됩니다. 코딩을 하는게 목적이니 증명에 대해서는 다음에 이야기하겠습니다.
최소 공배수를 구하는 경우
유클리드 호제법으로 최대 공약수를 구한 다음 (val1 X val2) / 최소 공배수를 하면 최대 공약수를 구할 수 있습니다.
추천 문제
반응형'쾌락없는 책임 (공부) > 알고리즘 공부' 카테고리의 다른 글
CCW - Counter Clockwise, 벡터의 외적 (0) 2021.06.28 에라토스테네스의 채 - 소수 구하기 (0) 2021.06.27 길찾기 알고리즘(3) - 벨만-포드 알고리즘 (0) 2021.06.23 길찾기 알고리즘(2) - 다익스트라 알고리즘 (0) 2021.06.17 길찾기 알고리즘(1) - 플로이드-와샬 알고리즘 (0) 2021.05.29