https://atcoder.jp/contests/abc169/tasks/abc169_d
前提知識
解説
https://atcoder.jp/contests/abc169/submissions/13920513
今回の操作では以下のことが言える。
これが思いつけば、まず第一段階はクリア。
独立性については、色々な問題で出てくる考え方なので、頑張って思いついてもらうとして、
2つ目だが、操作を行う問題の取り組み方として、「最適な方針があるかも」として考えるのはテクである。
選択肢の1つとして覚えておこう。
この最適操作をやるというのが次のステップになるが、操作を考えると、Nの素因数分解が必要そうな感じに見える。
実は素因数分解はO(sqrt(N))で行うことができる。
ググろう。
N=1012というのから計算量O(sqrt(N))をメタ読みして、素因数分解にたどり着いてもいい。
自分はメタ読みが先だった。
あとは、各素数についてp, p2, p3を割れなくなるまでシミュレートして、全体でやった回数をこたえると答え。
ll N; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N; auto ep = enumpr(N); int ans = 0; fore(p, ep) { int cnt = p.second; rep(i, 1, 1010) { if (i <= cnt) { ans++; cnt -= i; } else break; } } cout << ans << endl; }