티스토리 뷰
유클리드 호제법
a, b의 수가 있을 때
a, b의 최대공약수 gcd(a, b)는 gcd(b, a%b)로 표현 가능하다.
Ex) 12와 8의 최대공약수 구하기
gcd(12, 8) = gcd(8, 12%8) = gcd(8, 4) = gcd(4, 8%4) = gcd(4,0) = 4
최대공약수와 최소공배수의 곱은 두 수의 곱과 같으므로
lcm(a, b) * gcd(a, b) = a*b
따라서 a, b의 최소공배수 lmc(a, b)=(a*b)/gcd(a, b)가 된다.
최대공약수와 최소공배수를 구하는 함수 코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n, int m) {
vector<int> answer;
int a=n, b=m, r;
while(b!=0){
r=a%b;
a=b;
b=r;
}
answer.push_back(a); // 최대공약수
answer.push_back((n*m)/a); // 최소공배수
return answer;
}
'알고리즘' 카테고리의 다른 글
[백준 11729번/c++] 하노이 탑 이동 순서 (0) | 2022.01.17 |
---|---|
[프로그래머스/c++] 행렬의 덧셈(2차원 vector) (0) | 2022.01.17 |
[프로그래머스/c++] 핸드폰 번호 가리기(string 클래스) (0) | 2022.01.17 |
[프로그래머스/c++] 콜라츠추측(long long 자료형) (0) | 2022.01.17 |
[백준 11286번/c++] 절댓값 힙 (0) | 2022.01.15 |