1~n까지 합은 n(n+1)/2라는 것을 이용해서 [b까지의 합] - [a까지의 합] = a+1 + a+2 + ... + b가 되고, 이 숫자가 n이 되면 된다.
위 식을 정리하면 임의의 p,q에 대해서 p*q = 2*n이 되는 p, q쌍의 갯수가 정답이며, p와 q는 각각 (b-a), (b+a+1)이 된다.
한 가지 주의할 점은 b가 정수일 때만 정답에 해당되기 때문에 p + q가 짝수라면 정답에 포함되지 않도록 해야한다.
코드는 다음과 같다.
using namespace std;
int solution(int n) {
int answer = 1;
int n2 = n << 1;
for(int i=2;i<n;i++) {
if(!(n2 % i)) {
int p = i;
int q = n2 / i;
if((p + q) % 2 == 0 || p == 1)
continue;
if(p > q)
break;
answer++;
}
}
return answer;
}