829.consecutive-numbers-sum.cpp 506 B

1234567891011121314151617
  1. class Solution {
  2. public:
  3. int consecutiveNumbersSum(int N) {
  4. // Assume that we pick n elements start from x, then
  5. // for (x + (n - 1) * x) * n / 2 == N,
  6. // ie. n * x + n * (n - 1) / 2 == N
  7. // Just check for some n, we have valid x.
  8. int cnt = 0;
  9. for (int n = 1; ; n++) {
  10. // n * x = N - blabla
  11. int nx = N - (n * (n - 1) >> 1);
  12. if (nx < n) break;
  13. if (nx % n == 0) cnt++;
  14. }
  15. return cnt;
  16. }
  17. };