ABC 190 D(I hate Math)

我又回来了!
由于开学了,所以博客更的会比较少。

题面

有多少个整数序列是一个公差为 $ 1 $ 且和为 $ N $ 的等差数列?

思路

看等差数列

\[A, A + 1, A + 2, \cdots, B \]

它的和为

\[\frac {(A + B)(B - A + 1)} {2} \]

所以答案为满足

\[(A + B)(B - A + 1) = 2N \qquad (A < B) \]

的 $ A, B $ 的组数。

\[\begin{cases} A + B = x \\ B - A + 1 = y \\ xy = 2N \end{cases} \]

这个方程的解为

\[\begin{cases} A = \frac {x - y + 1} {2} \\ B = \frac {x + y - 1} {2} \end{cases} \]

所以,

\[x \equiv y - 1 \qquad (\text{mod} \ 2) \]

(对不起找不到不同余的符号)
枚举可。


其实,我们可以不断除 $ 2 $,直到不可除为止。
这次不用奇偶不同了。

代码

#include <bits/stdc++.h>
using namespace std;

int main() {
	long long N;
	scanf("%lld", &N);
	while (N % 2 == 0) {
		N /= 2;
	}
	long long i, ans = 0;
	for (i = 1; i * i <= N; i++) {
		if (N % i == 0) {
			ans += 2;
		}
	}
	if ((i - 1) * (i - 1) == N) {
		ans--;
	}
	cout << ans * 2;
}

点个免费的赞吧!

posted @ 2022-09-08 22:09  A-Problem-Solver  阅读(19)  评论(0编辑  收藏  举报