2025.5.8 闲话

调和级数求和 2

\([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\) 即可 .

posted @ 2025-05-08 11:36  Jijidawang  阅读(184)  评论(6)    收藏  举报
😅​