몇 번째 소수 구하기


솔직하게 고백해서, 1이 소수라고 생각했다. 그래서 몇 번의 오류가 났다. 이런 초등 수학도 배우지 못한.. 소수는 자기 자신과 1만 약수로 가지는 수이다. 그래서 1은 소수가 될 수 없다.
이 문제를 해결하기 위해서는 약수 성질을 이용해서 소수인지 아닌지를 구분하는 함수가 필요했다. 나름대로 함수를 작성했지만, 나중에 더 깔끔한 함수를 발견했다. 일단 내가 생각해서 작성한 소수 구별 함수를 아래에 적는다.

function onlyTwo(num) {
   
   if (num < 2) {
      return false
   
   } else {
      let temp = [];
      for (let i = 1; i <= num; i += 1) {
         if (num % i === 0) {
            temp.push(i)
         }
      }

      if (temp.length === 2) {
         return true;
      } else {
         return false;
      }
   }

}


반복문으로 완성된 temp의 길이가 2라면, 자기 자신과 1만 들어 있다는 사실을 알 수 있다. 이 점을 이용했다. 이제 문제에 대한 코드를 작성하려고 한다. 소수를 구별하는 함수가 잘 작성되었다면, 문제에 대한 코드는 이해하기 쉽다.

function primeMover(n) {

   let result = [];
   let check = 2; // 소수는 2부터 시작이기에 점검하는 수를 2로 시작!

   // n === 0 이 되는 시점에 반복문이 끝난다.
   while (n !== 0) {
      if (onlyTwo(check) === true) {
         result.push(check)
         n -= 1;
      }
      check += 1
   }

   return result[result.length - 1]
}