Algorithm_javascript/15. 약수, 배수와소수2

# 백준 4134번 다음 소수 (javascript, node.js)

luminouswy 2023. 7. 22. 14:48
반응형

백준 4134번 다음 소수 (javascript, node.js)

문제

 

4134번: 다음 소수

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다.

www.acmicpc.net


입력

  • 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다.

출력

  • 각각의 테스트 케이스에 대해서 n보다 크거나 같은 소수 중 가장 작은 소수를 한 줄에 하나씩 출력한다.

예제입력 1

3
6
20
100

예제출력 1

7
23
101


문제풀이

  • 문제를 봤을 때 무슨 소리지 하고 한 번에 이해 못 함.
  • 그냥 입력값이 소수이면 출력하고 아니면 그다음 소수를 출력하는 문제
  • 소수를 판별하는 함수를 사용하여 소수이면 출력하고 아니면 입력값을 더하여 반복해서 소수를 찾아주면 되는 문제
// 4134번 다음 소수

// 문제 : 정수 n(0 ≤ n ≤ 4*109)가 주어졌을 때, n보다 크거나 같은 소수 중 가장 작은 소수 찾는 프로그램을 작성하시오.
// 주어진 입력값이 소수이면 출력하고 아니면 입력값을 하나씩 더해서 소수를 찾아서 출력

// 소수를 판별할 수 있는 식이 필요
// 입력값이 소수인지 판별하고 아니면 하나씩 더해서 소수를 판별하여 출력

const fs = require("fs");
const file = process.platform === "linux" ? "dev/stdin" : "./text.txt";
const input = fs.readFileSync(file).toString().trim().split("\n");

input.shift(0);
const arr = input.map(Number);

// 소수 판별식
function isPrime(num) {
  if (num < 2) {
    return false;
  }

  for (let i = 2; i <= Math.floor(Math.sqrt(num)); i++) {
    if (num % i === 0) {
      // 한 번이라도 나누어 졌으니 소수가 아니므로 return false
      return false;
    }
  }
  // 나눠진 수가 없다면 해당 수는 소수이므로 return true
  return true;
}

// 입력 값 길이 만큼 반복
for (i = 0; i < arr.length; i++) {
  while (true) {
    // 입력값이 소수이면 출력하고 아니면 하나씩 더해서 반복
    if (isPrime(arr[i])) {
      console.log(arr[i]);
      break;
    } else {
      arr[i]++;
    }
  }
}