[etc] 최대공약수,최소공배수구하기 - 유클리드 호제법
최대공약수,최소공배수
고민
- 최대공약수는 두 자연수의 공통된 약수 중에 가장 큰 수
- 최소공배수는 두 자연수의 공통된 배수 중에 가장 작은 수 = 두 자연수의곱/최대공약수
- 2개의 자연수를 받아 최대공약수를 받기 위해 2부터 두 자연수 중 작은 자연수까지 모두 나누어보면서 가장 큰 공약수를 구할 수 있다. -> O(N)
- 유클리드 호제법 -> O(logN)
유클리드 호제법
유클리드 호제법은 2개의 자연수 또는 정식의 최대공약수를 구하는 알고리즘의 하나이다.
내 풀이
function solution(num1, num2) {
var val = gcd(num1, num2);
return [ val , num1 * num2 / val ];
}
function gcd(num1 , num2){
if(num2 == 0){
return num1;
}else{
return gcd(num2, num1 % num2);
}
}
M개의 최소 공배수
고민
N개의 최소 공배수를 하려면 1번째 2번째의 최소 공배수를 3번째 값과 또 최소 공배수를 구하고 그걸 또 4번째꺼와 구하고….
내풀이
function solution(a) {
var val=1;
var num1;
var num2;
for( var i=0; i<a.length ; i++){
num1 = val; // pre 최소공배수
num2 = a[i] // 다음값
val = (num1*num2)/gcd(num1, num2);
// (num1*num2)/gcd(num1, num2) -> 최소공배수
// gcd(num1, num2) -> 최대공약수
};
return val;
}
function gcd(num1 , num2){
if(num2 == 0){
return num1;
}else{
return gcd(num2, num1 % num2);
}
}