D - Staircase Sequences 解説
by
shakayami
以下の条件を満たす\((a,n)\)の組を求めればよいです。
条件:初項が\(a\),項数が\(n\)であるような等差数列の総和が\(N\)となる
等差数列の和はこのサイト を参照すると、\(\frac{1}{2}n(2a+n-1)\) となります。すなわち、
\[2N=n(2a+n-1)\]
であるような\((a,n)\)の個数を求めれば良いことになります。 まず、\(n\)は\(2N\)の正の約数となります。 ここで、\(n\)を一つ決め打ちした場合に条件を満たす\(a\)が存在するかどうかを判定すればよいです。
\(m=2N/n\)としたとき、\(m-n=2a-1\)となるため、\(m-n\)が奇数であることが必要です。逆に、\(m-n\)が奇数ならばそれに対応する\(a\)を一意に定めることができます。
よって、以下の問題と等価であることがわかります。
等価な問題:\(2N\)の正の約数\(d\)であって、\(d\)と\(2N/d\)の偶奇が異なるようなももの個数を求めよ。
これについては、\(2N\)の約数を全列挙したあとそれぞれについて確認すれば解けます。
約数全探索については\(O(\sqrt{N})\)で解けるアルゴリズムが知られています。\(N\leq 10^{12}\)であるため、\(\sqrt{N}\leq 10^6\)となります。よって、この解法で十分間に合うことがわかります。
実装例(Python): https://atcoder.jp/contests/abc190/submissions/19787117
投稿日時:
最終更新:
