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