From 4c46b214a3ec55f77fa230bff019693ed2ed6d08 Mon Sep 17 00:00:00 2001 From: luckylooky2 Date: Mon, 15 Jul 2024 19:44:22 +0900 Subject: [PATCH] =?UTF-8?q?07.15:=20prime=20number,=20integer(=EC=88=98=20?= =?UTF-8?q?=EB=82=98=EB=88=84=EA=B8=B0=20=EA=B2=8C=EC=9E=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- baekjoon/27172.js | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 baekjoon/27172.js diff --git a/baekjoon/27172.js b/baekjoon/27172.js new file mode 100644 index 0000000..b16df07 --- /dev/null +++ b/baekjoon/27172.js @@ -0,0 +1,48 @@ +// 수 나누기 게임 : 소수, 에라토스테네스의 체, 정수론 +const input = require("fs") + .readFileSync("/dev/stdin") + .toString() + .trim() + .split("\n") + .map((v) => v.split(" ").map((v) => Number(v))); +const [n] = input.shift(); +const cards = input.shift(); +const biggest = cards + .slice() + .sort((a, b) => a - b) + .at(-1); +const count = new Array(biggest + 1).fill(0); +const isValid = new Array(biggest + 1).fill(null); +const answer = []; + +for (const number of cards) { + const yaksu = []; + const sqrt = Math.sqrt(number); + for (let i = 1; i <= sqrt; i++) { + if (number % i === 0) { + yaksu.push(i); + count[i]++; + + if (number / i !== i) { + yaksu.push(number / i); + count[number / i]++; + } + } + } + isValid[number] = yaksu; +} + +for (let i = 0; i < cards.length; i++) { + const number = cards[i]; + const yaksus = isValid[number].sort((a, b) => a - b); + + let cnt = 0; + for (const yaksu of yaksus) { + if (isValid[yaksu]) { + cnt++; + } + } + answer.push(count[number] - cnt); +} + +console.log(answer.join(" "));