CADDi 2018:C - Product and GCD(300)

問題

https://atcoder.jp/contests/caddi2018/tasks/caddi2018_a

N 個の 1 以上の整数 a_1, a_2, \cdots, a_N がある。a_1 \times a_2 \times \cdots \times a_N = P であるとき、max(gcd(a_1, a_2, \cdots, a_N)) を求めよ。

制約

  • 1 \le N \le 10^{12}
  • 1 \le P \le 10^{12}

考え方

こういうのは  g = gcd(a_1, a_2, \cdots, a_N)) として考えるとよい。a_i = a_i' \times g となるので与式は  g^n \times (a_1' \times a_2' \times \cdots \times a_N') = P となる。

また P素因数分解して P = p_1^{e_1} \times p_2^{e_2} \times \cdots \times p_k^{e_k} と表せたとする。するとそれぞれの素因数の数 e_1, e_2, \cdots, e_kN つの a_i にそれぞれ分配することで最大値を達成できることがわかる。よって最大公約数 g は以下となる。

\displaystyle g = p_1^{\lfloor \frac{e_1}{N} \rfloor} \times p_2^{\lfloor \frac{e_2}{N} \rfloor} \times \cdots \times p_k^{\lfloor \frac{e_k}{N} \rfloor}

Submission #3854425 - CADDi 2018

どこに着目して考察するべきだったか

取りうる最大公約数 g を決め打ちしてしまうのが楽。そうすると P素因数分解の結果を比較して解が求まる。

何がバグっていたか

計算量 log(N) での素因数分解は最頻出のアルゴリズムなので無で実装できるようにしたい。

得た知見

類題