Description
求 ∑ni=11imodpk 。
Constraint
p≤105
pk⋅n≤1018
Analysis
首先,给出一条性质
a⇔ac≡b(modp)≡bc(modpc)
具体证明非常简单,只要考虑到
aac=kp+b=k(pc)+(bc)
那用处就是
amodp=bacmodpc=bc=(amodp)c
那这道题我们借鉴计算阶乘时的思想,提取出 p 整除的数。
然后我们分开考虑这两部分,先考虑第一部分,利用上性质(1)(2),可以得到
1p∑i=1⌊np⌋1imodpk=1p∑i=1⌊np⌋1imodpk=(∑1ipmodpk)⋅pp=(p(∑1ipmodpk))⋅1p=(∑1imodpk+1)⋅1p=Solve(⌊np⌋,k+1)⋅1p
递归求解即可,现在考虑第二部分
∑0<a<pa+bp≤n1a+bp=∑a=1p−1∑b=0⌊n−ap⌋1a+bp=∑a=1p−1∑b=0⌊n−ap⌋11+bpa⋅1a=∑a=1p−11a∑b=0⌊n−ap⌋11−(−bpa)=∑a=1p−11a∑b=0⌊n−ap⌋∑i=0∞(−bpa)i=∑a=1p−11a∑b=0⌊n−ap⌋∑i=0∞(−pa)i⋅bi=∑a=1p−11a∑i=0k−1(−pa)i∑b=0⌊n−ap⌋bi
这里就是自然数幂求和,用
[2k×2k]
的矩阵,
一次求出所有
i
的
时间复杂度: T(n,k)=T(np,k+1)+k3+kp=(k3+kp)lognp 。