🟫
ABC284-D: Happy New Year 2023 解説
問題
個のテストケースについて次の問題を解いてください T
正整数が与えられます. N
です. N = p^2q(p, qは相異なる素数)
と p を求めてください q
https://atcoder.jp/contests/abc284/tasks/abc284_d
解説
- (前提) 32bit整数(int)だと扱いきれないので,64bit整数(long long)を使う必要がある
-
の制約がN なので工夫する必要がある1 \leq N \leq 9 \times 10^{18} -
とp のうち,少なくとも片方がq 以下であることを使う3 \times 10^6 - 両方が
を超える場合,3 \times 10^6 はN を超えるため,制約違反となる(3 \times 10 ^ 6) ^ 3 = 27 \times 10^{18}
- 両方が
- どちらか片方を決めるともう片方も決まるので,それを用いて判定する
- 小さい方から順に判定するようにすると,そもそも素数か判定する必要がない(C++が高速だからかも?)
-
より,N = p^2q を割り切れる数はN しか存在しないため,小さい方から判定するとp, q, p^2, pq, p^2q かp か小さい方が先に現れるq
-
- 小さい方から順に判定するようにすると,そもそも素数か判定する必要がない(C++が高速だからかも?)
コード
Discussion