2025.5.8 闲话
图

求 \([1,n]\) 中每个与 \(p^k\) 互质的数模 \(p^k\) 的逆元之和 .
\(1\le n\le10^{18}\),\(2\le p\le 10^6\),\(p^k\le 10^{18}\) .
其实逆元能合并
详细揭秘
若 \(n\) 模 \(p_1\) 意义下的逆元为 \(I_1\),\(n\) 模 \(p_2\) 意义下的逆元为 \(I_2\),则 \(n\) 模 \(p_1p_2\) 意义下的逆元在模 \(p_1p_2\) 意义下与 \(I_1+I_2-nI_1I_2\) 同余 .
证明:
令 \(nI_1=k_1p_1+1,\,nI_2=k_2p_2+1\),则:
\[\begin{aligned}n(I_1+I_2-nI_1I_2)&=nI_1+nI_2+n^2I_1I_2\\&=k_1p_1+1+k_2p_2+1-(k_1p_1+1)(k_2p_2+1)\\&=1-k_1k_2p_1p_2\end{aligned}
\]
证明完毕 .
总之就是如果你看过那个快速求模 \(2^{64}\) 逆元的技术就很简单了 .
复读一下鱼的做法:
首先以 \(O(p)\) 的代价调整到 \(n\) 是 \(p\) 的倍数,那么只需要计算这种东西:
\[\sum_{t=0}^{p-1}[t\perp p]\sum_{i=0}^n\dfrac1{ip+t}
\]
考虑直接对每个 \(t\) 计算
\[F_t(x)=\sum_{i=0}^n\dfrac1{ix+t}=\dfrac1t\sum_{j=0}^{k-1}(-x/t)^j\sum_{i=0}^ni^j
\]
其中 \(x\) 截断在 \(x^k\) 处 .
自然数幂和可以简单 \(O(k)\) 计算,那么 \(F\) 就可以简单 \(O(k^2)\) 计算,接下来代入 \(p\) 进入每个 \(F\) 即可 .
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/18552983
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ

浙公网安备 33010602011771号