수학적 호기심

문제

언어

  • JavaScript

순서도

  1. 각 테스트케이스마다 (a^2 + b^2 + m)/(a * b) 가 정수인 정수 쌍 (a, b) 의 개수 구하기

문제 풀이 step 1

  • 두 정수 n 과 m 이 주어졌을 때, 0 < a < b < n 인 정수 쌍 (a, b) 중에서 (a ^ 2 + b ^ 2 + m) / (a * b) 가 정수인 쌍의 개수를 구하는 문제입니다.
  • 크게 어려운 부분은 없습니다. 그냥 2 중 반복문을 사용해서 모든 정수 쌍에 대해서 위의 식이 정수인지 검사해주면 됩니다.
  • 그렇다면 정수 판별은 어떻게 할까요?? 기초적인 방법 2 가지가 있습니다.
    1. Number.isInteger()
    2. number % 1 === 0
  • 추가 설명은 주석으로 작성하겠습니다.

후기

  • JavaScript 에서 정수 판별을 처음 다뤄봐서 포스트하게 되었습니다.

소스 코드

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

const solution = (input) => {
	let t = Number(input[0]);

	let res = "";
	let index = 1;
	while (t-- > 0) {
		const [n, m] = input[index++].split(" ").map(Number);

		// 모든 정수 쌍에 대해서
		let cnt = 0;
		for (let i = 1; i < n; i++) {
			for (let j = i + 1; j < n; j++) {
				// 정수 판별
				if (Number.isInteger((i * i + j * j + m) / (i * j))) cnt += 1;
			}
		}

		res += `${cnt}\n`;
	}

	return res;
};

console.log(solution(input));