홀수&짝수 , 약수, 소수 구하기

여러 문제들을 접하면서 가장 많이, 유용하게 쓰이는
홀수&짝수, 약수, 소수를 구하는 방법을 알아보자.


홀수&짝수
-> num % 2 === 0 이면, num은 짝수.
why? ) 모든 짝수는 2로 나눴을때 나머지가 0이다.
반대로, num % 2 === 1 이면, num은 홀수.
why? ) 모든 홀수는 2로 나눴을때 나머지가 1이다.

약수
-> 어떤 숫자 안의 약수들을 알아내고 싶다.
만약, 4의 약수를 구하고싶다면,
4에 %를 1부터 4까지 실행해본다 (i로 선언)
ex) 4 % i === 0 일때, i는 4의 약수이다.
why? ) 해당 숫자와 나눴을때 나머지가 0이면, 그 수는 해당 숫자의 약수이므로

소수
-> 소수를 구하는법은 세 가지 방법이 있다.

  • 직접 나눠서 계산
  • 판별을 원하는 수/2까지만 나눠서 계산
  • 판별을 원하는 수의 제곱근 까지만 나눠서 계산.

먼저 직접 나눠서 계산하는 방법이다.
소수는 소수인 2부터 판별할 수 있다.
그러므로 2를 먼저 리턴해주고,
반복문을 이용해서 2부터 해당 숫자까지 나눴을때 나머지가 0이 되는 수가 있는지 알아보고(약수), 있다면 false,
없다면(소수) 반복문을 빠져나와 ture를 리턴해준다.


function isPrime(num) {
  if (num === 2) {
    return true;
  }
  
  for (let i = 2; i < num; i++) {
    if (num % i === 0) {
      return false;
      //나누어 떨어진 수(약수)가 있으므로 소수가 아님.
    }
  }
  return true;
  //나누어 떨어진 수(약수)가 없으므로 소수.
}

다음은 판별을 원하는 수/2까지만 나눠서 계산하는 방법이다.
첫번째 방법에서 반복문의 범위를 2로 나눈 방법이다.
why? ) 원하는 수(num)의 약수는 그 수의 절반을 넘을 수 없기때문.
ex) 6의 약수는 1, 3, 6인데, 6의 절반인 3을 넘은 4, 5는 절대 6의 약수가 될 수 없다.

function isPrime(num) {
  if (num === 2) {
    return true;
  }
  
  for (let i = 2; i < num / 2; i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

마지막 방법은 판별을 원하는 수의 제곱근 까지만 나눠서 계산하는 방법이다.
첫번째 그리고 두번째 방법에서 반복문의 범위를 √number까지로 지정한 방법이다.
why? ) 원하는 수(num)에 약수가 있다면, 약수는 그 수의 제곱근(√) 안에 있다. 그러므로 원하는 수에서 그 수의 제곱근까지 나눴을때 나누어 떨어지는 수가 없다면, 그 수는 소수이다.

function isPrime(num) {
  if (num === 2) {
    return true;
  }
  if (num === 1) {
    return false;
  }
  
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

좋은 웹페이지 즐겨찾기