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

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

AtCoder Beginner Contest 169 [ D - Div Game ]をPythonで解く(400点、🟫茶diff)

問題

atcoder.jp

解法

整数Nを素因数分解する。
公式のpdfより引用。

N = p1e1 × ... × pkek素因数分解されるとします。このとき、各 pi に対して、 z = pi1, pi2, ... と順番に選んでいくのが最適です。

素因数分解は、検索すればやり方はすぐわかるのだが、答えを出すロジックがかなり悩む。
他の人の書いたコードに良いのがあって、それを拝借。
pの1乗、2乗と素因数分解の結果から引いていく。

普通に素因数分解した値をNから割るのか?と思ってたけど、素因数分解がそもそも割り算した結果だから、素因数分解の結果から答えを数えて出すやり方がスマートですね。

実装

参考

https://img.atcoder.jp/abc169/editorial.pdf

note.nkmk.me

atcoder.jp

 ansを出すロジックを拝借。