1234567891011121314151617 |
- class Solution {
- public:
- int consecutiveNumbersSum(int N) {
- // Assume that we pick n elements start from x, then
- // for (x + (n - 1) * x) * n / 2 == N,
- // ie. n * x + n * (n - 1) / 2 == N
- // Just check for some n, we have valid x.
- int cnt = 0;
- for (int n = 1; ; n++) {
- // n * x = N - blabla
- int nx = N - (n * (n - 1) >> 1);
- if (nx < n) break;
- if (nx % n == 0) cnt++;
- }
- return cnt;
- }
- };
|