유클리드 호제법, GCD, LCM 구하기

Mayton·2022년 12월 29일
0

Coding-Test

목록 보기
36/37
post-thumbnail

⭐️ 유클리드 호제법

유클리드 호제법은 num1%num2=r 일 때, GCD(num1,num2)=GCD(num2,r)과 같다는 것이다. 이 때, r=0이라면, num2가 gcd(num1,num2)가 될 것이다.

재귀를 이용한 방법

const gcd=(num1, num2)=>  num2>0? gcd(num2,num1%num2):num1

while을 이용한 방법

const gcd=(num1, num2)=>{
  
  while(num2>0){
    let r=num1%num2;
    num1=num2;
    num2=r;
  }
  
  return num1;

⭐️ 최대공약수

  • 최대공약수는 두 수 A와 B의 공통된 약수 중에 가장 큰 정수이다.
  • 최대공약수를 구하는 가장 쉬운 방법은 2부터 min(A, B)까지 모든 정수로 나누어보는 방법이다.
let getGCD = (num1, num2) => {
    let gcd = 1;

    for(let i=2; i<=Math.min(num1, num2); i++){
        if(num1 % i === 0 && num2 % i === 0){
            gcd = i;
        }
    }

    return gcd;
}

⭐️ 최소공배수

  • 두 수, 혹은 그 이상의 여러 수의 공통인 배수 중 가장 작은 수이다.
  • i를 두 수로 나누었을 때 나머지가 0이되는 최소의 수를 구할 수 있다.
const getLCM = (num1, num2) =>{
	let lcm = 1;
   
    while(true){
      if((lcm % num1 == 0) && (lcm % num2 == 0)){
        break;
      }
      lcm++;
    }
  	return lcm
}

⭐️ 유클리드 호제법을 이용한 최대공약수, 최소공배수

const gcd= (a,b) => a%b===0 ? b: gcd(b,a%b);
const lcm= (a,b) => a*b / gcd(a,b);
profile
개발 취준생

0개의 댓글