PA2013 Euler 社论
PA2013 Euler
给一个正整数 \(n\),找到所有的 \(a\) 使得 \(\varphi(a)=n\),其中 \(\varphi\) 是 Euler totient function .
\(n\le 10^{10}\) .
令 \(\displaystyle n=\prod_{i=1}^kp_i^{\alpha_i}\),其中 \(p_i\) 是素数,\(\alpha_i>0\),则
\[\varphi(n)=\prod_{i=1}^kp_i^{\alpha_i-1}(p_i-1)
\]
考虑枚举 \(n\) 的每个约数 \(d\),若 \(d+1\) 是素数那么就有可能作为答案的质因子出现 .
于是暴力 DFS,对于每个数 \(n\),每次枚举下一个要在答案中出现的素因子 \(p\),然后令 \(n\gets \dfrac n{p-1}\) 即可 .
不难发现只有 \((p-1)\mid n\) 才可能有解,于是令 \(D_{i,j}\) 表示第 \(i\) 个约数在第 \(j\) 个素数之后第一个能被整除的位置,转移的时候按 \(D\) 枚举即可,\(D\) 的预处理是平凡的 .
还得判一下一个因子 \(d\) 在 \(n\) 的所有因子中的排名,按 \(\sqrt n\) 分治即可用两个长 \(\sqrt n\) 的数组维护 .
注意 \(n=1\) 时跳出 .
时间复杂度 \(O(\sqrt n\log n)\),可能分析的不准,轻 D .
洛谷提交记录 R84926290 .
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16618297.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ