Programmers

[Programmers] k진수에서 소수 개수 구하기 문제 - (javascript)

무브로드 2022. 1. 31. 22:55
728x90
문제 이름 :  k진수에서 소수 개수 구하기

 

<<< 문제 내용 >>>

 

function solution(n, k) {
  const isPrime = (num) => {
    if (num === 1) return false;
    if (num === 2) return true;

    for (let i = 2; i*i <= num; i++) {
      if (num % i === 0) return false;
    }

    return true;
  };

  return n
    .toString(k) // k진수로 변경한 후
    .split("0") // 0을 기준으로 소수인지를 판별할 수 있기 때문에 0으로 split
    .filter((el) => el.length !== 0) // 000 처럼 연속적인 경우 빈 배열이 나오기때문에 제거
    .filter((el) => sosu(Number(el))).length; // 남은 판별을 위한 수들을 함수를 이용해 정리
}

 

 

* 특정 수가 소수인지를 구하는 문제는 위의 isPrime 방식으로 구하면 제일 빠르게 구할 수 있고

특정 수 까지 소수인지를 구하는 방법은 에라토스테네스의 체를 이용하면 된다.

-> 에라토스테네스의 체란?

 

2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다.
2는 소수이므로 오른쪽에 2를 쓴다.
자기 자신을 제외한 2의 배수를 모두 지운다.
남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다.
자기 자신을 제외한 3의 배수를 모두 지운다.
남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다.
자기 자신을 제외한 5의 배수를 모두 지운다.
남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다.
자기 자신을 제외한 7의 배수를 모두 지운다.
위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.

아래는 이를 코드로 표현한 것이다.

 

 

 

도움이 되셨다면 공감 부탁드립니다.