人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

AtCoder Beginner Contest 190 [ D - Staircase Sequences ]をPythonで解く(400点、🟫茶diff)

問題

atcoder.jp 整数からなる公差 1の等差数列のうち、総和が Nであるものはいくつあるでしょうか?

解法

等差数列の和の公式
初項が a,公差が d,項数が n
Sn = n/2(2a + (n-1)*d)

d = 1なので
Sn = n/2(2a + (n-1))

2Sn = n(2a + (n-1))
なので、nは2
Snの正の約数になる

展開すると
2Sn/n - n = 2a-1
2*a-1は必ず奇数で、奇数かどうかで成立するかどうかが判定できる

nは約数なので、2Snの約数を総当たりで求める。
nを仮決めすると2
a-1の値は2*Sn/n - nで求められる。
この値の奇遇を判定する。

実装

参考

atcoder.jp

manabitimes.jp