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 .

posted @ 2022-08-23 23:43  Jijidawang  阅读(50)  评论(0编辑  收藏  举报
😅​