안녕하세요

[node.js] 4948 베르트랑 공준 (자바스크립트) 기본수학단계2 본문

백준 자바스크립트

[node.js] 4948 베르트랑 공준 (자바스크립트) 기본수학단계2

sakuraop 2022. 6. 15. 00:26

4948 베르트랑 공준

자연수 n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오.

1
10
13
100
1000
10000
100000
0

각 테스트 케이스에 대해서, n보다 크고, 2n보다 작거나 같은 소수의 개수를 출력합니다.

1
4
3
21
135
1033
8392

 

제출한 답

const input = require("fs").readFileSync("dev/stdin").toString().split("\n").map((x) => x.trim());

function prime(j) {
  for (k = 2; k * k <= j; k++) {
    if (j == 1) {
      return false;
    }
    if (j % k == 0) {
      return false;
    }
  }
  return 1;
}

for (i = 0; i <= input.length - 1; i++) {
  let count = 0;
  let num = Number(input[i]);
  if (num == 0) {
    break;
  }
  for (j = num + 1; j <= num * 2; j++) {
    count += prime(j);
  }
  console.log(count);
}

 

코드설명

소수판별식에 판별하고자 하는 값을 입력하여, 소수인 경우에 1을 반환할 것입니다.
그리고 반환된 1의 갯수는 n+1부터 n*2 사이의 소수의 갯수가 됩니다. 이를 출력합니다.

 

function prime(j) {
  for (k = 2; k * k <= j; k++) {
    if (j == 1) {
      return false;
    }
    if (j % k == 0) {
      return false;
    }
  }
  return 1;
소수판별식입니다.  j가 소수라면 1을 반환합니다.

 

for (i = 0; i <= input.length - 1; i++) {
  let count = 0;
  let num = Number(input[i]);
  if (num == 0) {
    break;
  }
count에 반환 받은 1을 더할 것입니다.
테스트케이스[1, 10, 13, ..., 100000, 0]를 순서대로 입력 받습니다.
주어진 조건에 따라 0을 입력받으면 프로그램을 종료합니다. 

 

  for (j = num + 1; j <= num * 2; j++) {
    count += prime(j);
  }
소수판별식에 입력할 값입니다. n + 1 부터 2 * n 사이의 수에 소수가 몇 개인지 구합니다.
만일 10을 입력받았다면, 11~20의 수를 소수판별식에 순서대로 입력하게 됩니다.
소수로 판별된 경우에는 count +1 을 합니다. 

 

  console.log(count);
}
입력받은 [1, 10, 13, ..., 100000]값의 소수의 갯수인 count를 차례대로 출력합니다.