約数の全列挙の高速化

1 min read

ある整数 $n​$ の約数を全て探すとき,普通は $1​$ から $n​$ までを走査するfor文で1つ1つ約数判定を行う.この場合の計算量は $O(n)​$ であり,制約が $n \leq 10^9​$ のような競プロのコンテストでは通常通らないと考える.

しかし, $n=a \times b$ を満たすような整数ペア $a, b (a \leq b)$ を考えると, $a \leq\sqrt{n}$ を満たすため,これを利用することで $O(\sqrt{n})$ で約数を全列挙できる.

ちなみにこれは Atcoder ABC112 D で使用した.実はGoで書くと $n$ が $10^9$ でも通るのだけど,まぁ増やされたらそれまでなのでまとめてみた.

comments powered by Disqus

こちらの記事もどうぞ