대부분의 양의 정수는 적어도 2개 이상의 연속된 자연수의 합으로 나타낼 수 있다.
예를 들면 다음과 같다.
6 = 1 + 2 + 3
9 = 5 + 4 = 4 + 3 + 2
하지만, 8은 연속된 자연수 합으로 나타낼 수가 없다.
자연수 N이 주어졌을 때, 이 수를 적어도 2개 이상의 연속된 자연수의 합으로 나타낼 수 있는 경우의 수를 출력하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 정수 하나로 이루어져 있다. 이 정수는 문제에서 설명한 N이며, 231보다 작다.
각 테스트 케이스에 대해서 N을 적어도 2개 이상의 연속된 자연수의 합으로 나타내는 경우의 수를 출력한다.
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int testcase;
cin >> testcase;
for (int tc = 0; tc < testcase; tc++)
{
int n;
cin >> n;
int count = 0;
n--;
for (int i = 2; i <= n; i++)
{
n -= i;
count += n % i == 0 ? 1 : 0;
}
cout << count << endl;
}
}
function solution(nums) {
let answer = [];
for (let i = 0; i < nums.length; i++) {
nums[i]--;
let count = 0;
for (let j = 2; j <= nums[i]; j++) {
nums[i] -= j;
count += nums[i] % j === 0 ? 1 : 0;
}
answer.push(count);
}
return answer;
}
console.log(solution([6, 9, 8, 1800, 987654321, 987654323, 987654325]));