2020 Ateneo de Manila University DISCS PrO HS Division
打这场的时候处于玄学状态,这 sb 题竟然搞了一个多小时
提供一个和题解不同的方法
【题意】
若给定正整数 \(n\) ,可以将其所有因数累乘,得到 \(m\) 。
现给定 \(m\) ,问是否存在该 \(n\) 。
\(m\leq 10^{15}\)
【分析】
设 \(\displaystyle n=\prod_i p_i^{k_i}\) 的因数个数为 \(\displaystyle \boldsymbol d(n)=\prod_i (1+k_i)\)
则 \(\displaystyle m=\prod_i (\prod_{j=1}^{k_i} p_i^j)^{\prod_{j\neq i}(1+k_j)}=\prod_i (p_i^{k_i(k_i+1)\over 2})^{\boldsymbol d(n)\over k_i+1}=(\prod_i p_i^{k_i})^{\boldsymbol d(n)\over 2}=n^{\boldsymbol d(n)\over 2}\)
即 \(m^2=n^{\boldsymbol d(n)}\)
现在进行分类讨论:
当 \(\boldsymbol d(n)\geq 5\) 时,由于 \(m\leq 10^{15}\) ,故 \(n\leq m^{2\over 5}\leq 10^{15\cdot {2\over 5}}=10^6\)
因此,我们可以先枚举倍数,用 \(O(n\log n)\) 的时间对 \(n\leq 10^6\) 的数字进行打表,之后暴力查表,查找是否存在 \(n^{\boldsymbol d(n)}=m^2\)
当 \(\boldsymbol d(n)=1\) 时 \(n=1\) 得出 \(m=1\),直接验证
当 \(\boldsymbol d(n)=2\) 时 \(n\in Prime\) 得出 \(m=n\),\(O(\sqrt m)\) 验证
当 \(\boldsymbol d(n)=3\) 时 \(n=p^2, p\in Prime\Rightarrow m^2=n^3=p^6\Rightarrow m=p^3\)
故 \(p=m^{1\over 3}\leq 10^5\) ,暴力枚举 \(O(m^{1\over 3})\) 验证
当 \(\boldsymbol d(n)=4\) 时 \(m^2=n^4\to n=\sqrt m\) ,先验证 \(\sqrt m\) 是否为整数;之后根据 \(d(n)=4\) 得出 \(n=p^3\wedge n=pq, p\neq q\wedge p,q \in Prime\)
由于 \(n=\sqrt m\leq 10^{7.5}\) ,故直接 \(O(\sqrt n)\) 枚举最小质因数 \(i\)
若 \(n=i^3\) 则得出答案;否则判定是否 \(n=i^2\) 而不满足题意;最后 \(O(\sqrt n)\) check \({n\over i}\) 是否为质数