Solutions of Consecutive - MarisaOJ: Marisa Online Judge

Solutions of Consecutive

Select solution language

Write solution here.


User Avatar hungkm466    Created at    2 likes

# 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; } ```