Official
G - sqrt(n²+n+X) Editorial
by
G - sqrt(n²+n+X) Editorial
by
sounansya
\(m = \sqrt{n^2+n+X}\) とします。 \(m \geq 0 \) という条件下で、この式は以下のように同値変形できます。
\[ \begin{aligned} &\phantom{\Leftrightarrow} m = \sqrt{n^2+n+X}\\ &\Leftrightarrow m^2=n^2+n+X\\ &\Leftrightarrow (2m+2n+1)(2m-2n-1)=4X-1\\ \end{aligned} \]
したがって、 \(4X-1\) の(負も含む)約数 \(d\) 全てに対して \(\displaystyle 2m+2n+1=d,\ 2m-2n-1=\frac{4X-1}d\) と \(m \geq 0\) を満たす整数の組 \((n,m)\) が存在するか判定し、解が存在するような \(n\) を全て列挙すれば良いです。
以上を適切に実装することでこの問題に正答することができます。計算量は \(O(\sqrt X)\) です。
x = int(input())
ans = []
c = 4 * x - 1
def add(d):
ans.append((d - c // d - 2) // 4)
d = -1
while d * d <= abs(c):
d += 2
if c % d != 0:
continue
add(d), add(-d)
add(c // d), add(-c // d)
ans = sorted(list(set(ans)))
print(len(ans))
print(*ans)
posted:
last update: