본문 바로가기
codes/반복문

17_isPrime

by Mia_ 2022. 10. 29.

* 소수란?

1과 자기 자신만으로 나누어 지는 1보다 큰 양의 정수

- 소수의 조건
1.1보다 커야한다
2. 2를 제외한 짝수는 소수가 아니다(2는 소수임)
3. 3부터 자기 자신까지 반복하면서 나눠서 떨어지는 수(약수)가 하나라도 있으면 소수가 아니다.
 
 
* Math.sqrt( ) : 숫자의 제곱근 반환
let sqrt = Math.sqrt(num)

num = 18;
1,2,3,6,9,18
1*18, 2*9, 3*6, 루트18=Math.sqrt(18), 6*3, 9*2, 18*1

function isPrime(num) {
  //Q. 1 이상의 자연수를 입력받아 소수인지 여부를 리턴
  //불린 타입으로 리턴 할 것

  //받은 숫자를 0부터 받은 숫자까지 증가시키면서 하나씩 대입해서
  //나눠보기, 나눠지는 수가 있으면 false, 나눠지는 수가 없으면 true

  //2는 true 출력 시켜야 하므로 if문으로 예외 표시
  if(num === 1){
    return false;
  }

  if(num === 2){
    return true;
  }

  if(num % 2 === 0){ //2의 배수들은 우선 소수가 아님! 
    return false;
  }

  for(let i = 3; i < num; i++){
    if(num % i === 0){
      return false;
    }
  }
  return true;
}
//Reference code
function isPrime(num) {
  let sqrt = parseInt(Math.sqrt(num));

  if (num === 1) {
    return false;
  }

  if (num === 2) {
    return true;
  }

  if (num % 2 === 0) {
    return false;
  }

  for (let i = 3; i <= sqrt; i += 2) { //어차피 2의 배수 걸러서 3부터 홀수만 체크
    if (num % i === 0) {
      return false;
    }
  }

  return true;
}

'codes > 반복문' 카테고리의 다른 글

18_listPrimes  (0) 2022.10.29
16_getSumOfFactors  (0) 2022.10.29
15_computePower  (0) 2022.10.29
14_characterAndNumber  (0) 2022.10.27
13_replaceAll  (0) 2022.10.27