치춘짱베리굿나이스

[백준] 1456 본문

거의 소수

문제

어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다.

두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다.

입력

첫째 줄에 왼쪽 범위 A와 오른쪽 범위 B가 공백 한 칸을 사이에 두고 주어진다.

출력

첫째 줄에 총 몇 개가 있는지 출력한다.

제한

  • 1 ≤ A ≤ B ≤ 10^14

풀이

const almost = () => {
  let [a, b] = require("fs")
    .readFileSync("/dev/stdin")
    .toString()
    .trim()
    .split(" ")
    .map(Number);
  let eratos = Array.from({ length: 10000001 }, (n, i) =>
    i === 1 ? false : true
  );
  for (let i = 2; i < 3163; i++) {
    if (eratos[i]) for (let j = 2; j < 10000002 / i; j++) eratos[i * j] = false;
  }

  let ans = 0;
  const rootB = Math.sqrt(b);
  for (let i = 1; i <= 10000000; i++) {
    if (eratos[i]) {
      let pow = i * i;
      while (pow <= b) {
        if (pow >= a) ans++;
        pow *= i;
      }
    }
  }

  console.log(ans);
};

almost();

반성회

a와 b의 범위가 10의 14승이기 때문에 에라토스테네스의 체도 10의 7승까지는 전부 해주어야 함

이 부분에서 상당히 오래 걸릴 줄 알았는데 시간제한 2초로 좀 넉넉해서 무난히 통과했다

'Javascript + Typescript > 자바스크립트로 알고리즘풀기' 카테고리의 다른 글

[백준] 11931  (0) 2022.05.08
[백준] 1297  (0) 2022.05.08
[백준] 5554  (0) 2022.05.08
[백준] 9653  (0) 2022.05.08
[백준] 5339  (0) 2022.05.08
Comments