Description
Solution
既然保证最后答案有逆元,那么将原式拆成有逆元和没有逆元两部分
即
∑a=1⌊np⌋1a∗p+∑i=0⌊np⌋−1∑j=1p−11i∗p+j(modpk)
前面没有逆元,后面有逆元
后面剩下那部分很少,最多不超过p个,直接暴力做即可
考虑前面
那么就是
1p∑a=1⌊np⌋1a(modpk)
设其为f(n,p)
我们知道
a≡b(modp)等价于ac≡bc(modpc)
那么原式等于f(⌊np⌋,k+1)/p
递归处理即可
考虑有逆元的部分
∑i=0⌊np⌋−1∑j=1p−11i∗p+j(modpk)
提一个j的逆元出来
=∑i=0⌊np⌋−1∑j=1p−1j−11i∗p∗j−1+1(modpk)
i=0的直接先做掉
根据泰勒展开公式,当x∞→0时,11−x的泰勒展开式是∑i=0∞xi
证明可以用等比数列,x∞−1x−1=0−1x−1=11−x
显然,(−i∗p∗j)∞在模pk意义下是等于0的
那么成立
原式子就变成
∑i=1⌊np⌋−1∑j=1p−1j−1∑q=0∞(−i∗p∗j−1)q(modpk)
因为是模pk,所以k-1次方以后都是0
=∑i=1⌊np⌋−1∑j=1p−1j−1∑q=0k−1(−i∗p∗j−1)q(modpk)
交换主体
=∑j=1p−1j−1∑q=0k−1(−p∗j−1)q∑i=1⌊np⌋−1iq(modpk)
后面用做一个自然数幂和就可以了
Code
因为是口胡,所以并没有代码