# Hướng dẫn
Phân tích n thành tổng ít nhất 2 số nguyên liên tiếp đồng nghĩa với đếm số cặp **(l, r)** thoả mãn:
**(r - l + 1) * (r + l) = 2 * n.** \
Đặt **a = r - l + 1, b = r + l (a < b)**. \
⇒ **l = (b - a + 1) / 2** \
⇒ **r = (b + a - 1) / 2** \
Nhận thấy a, b là ước số của 2 * n nên ta chỉ cần duyệt qua các ước số của 2 * n và kiểm tra xem có
thoả mãn đồng thời cả 2 điều kiện:
- **(b - a + 1) % 2 == 0**
- **(b + a - 1) % 2 == 0** \
Hay không.
**Code**
```
#include <iostream>
using namespace std;
long long n;
signed main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
cin >> n;
n *= 2;
int res = 0;
for (long long i=2; i*i<=n; ++i)
if (n % i == 0)
{
if (n/i == i) continue;
long long a = i;
long long b = n/i;
res += ((b - a + 1) % 2 == 0 && (b + a - 1) % 2 == 0);
}
return cout << res, 0;
}
```
# Giải :
mình sẽ giải bài này theo toán học
vì ta cần tìm số lần tổng các số liên tiếp bằng n mà tổng các số liên tiếp bằng n ta có thể thấy
giống như bài toán cấp số cộng với d = 1 và U1 là một số chưa biết mà theo bài tổng các số nguyên
dương khi đó ta có thể nhận ra U1 cũng phải nguyên dương mà U1 + (U1+d) + ... + (U1+(k-1)d) = n với
k là số lượng của các phần tử liên tiếp ta có thể gộp biểu thức trên thành kU1 + ((k-1)k)/2 = n
có thể bạn chưa biết n(n+1)/2 là tổng các số liên tiếp từ 1 đến n tương tự như trên thì ((k-1)k)/2
là tổng các số liên tiếp từ 1 đến k-1, ta có n không đổi và U1 là số nguyên dương bất kì vậy ta chỉ
cần đếm số lần số k thoả mãn kU1 + ((k-1)k)/2 = n và U1 là số nguyên dương là ra kết quả của bài toán
rồi, vậy ta cần đếm k từ đâu và khi nào dừng lại. Ta bắt đầu k tại 2 vì bài yêu cầu ít nhất là 2 số
liên tiếp cộng với nhau và kết thúc tại ((1+8n)-1)/2 vì ta cần tìm hết tất cả số k mà bài bắt là tìm
tổng liên tiếp các số nguyên dương khi đó ta có ((L+1)L)/2 = n với L là số lớn nhất mà tổng số lượng
từ 1 đến L nhỏ hơn hoặc bằng n vì L là giá trị lớn nhất có thể thoả mãn nên ta sẽ cho k kết thúc tại
đó và khi ta khai triển ((L+1)L)/2 = n ra thì ta sẽ được L^2 + L - 2n = 0 một phương trình bậc 2
và ((1+8n)-1)/2 là 1 trong 2 nghiệm của phương trình và nó luôn dương vì k là số nguyên dương.
# CODE :
```Python
n = int(input())
L = round(((1+8*n)**0.5-1)/2)
s = 0
for k in range(2,L+1):
bt = (n-((k-1)*k)//2)/k
if int(bt) == bt:
s += 1
print(s)
```