양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진다. 입력으로 주어지는 수는 1,000,000을 넘지 않는다.
각 테스트 케이스마다 가능한 모든 쌍의 GCD의 합을 출력한다.
3
4 10 20 30 40
3 7 5 12
3 125 15 25
70
3
35
//---- 세팅 ----//
const fs = require('fs');
const stdin = (
process.platform === 'linux'
? fs.readFileSync('/dev/stdin').toString()
: `\
3
4 10 20 30 40
3 7 5 12
3 125 15 25
`
).split('\n');
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
//---- 풀이 -----//
const t = Number(input());
const numsetArr = [];
[...Array(t)].forEach(_ => {
numsetArr.push(input().split(' ').map(Number));
});
function gcd(a, b) {
if (b === 0) return a;
return gcd(b, a % b);
}
function calc(arr) {
let sum = 0;
for (let i = 1; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
sum += gcd(arr[i], arr[j]);
}
}
return sum;
}
const res = numsetArr.map(numset => {
return calc(numset);
});
console.log(res.join('\n'));
주의!
첫번째 인자는 주어진 숫자의 갯수를 의미한다.
입력받은 배열을 순회하면서 모든 가능한 쌍의 gcd를 구한다.