Description

[JZOJ4367]【GDKOI2016】小学生数学题(口胡)_自然数幂和


[JZOJ4367]【GDKOI2016】小学生数学题(口胡)_GDKOI2016_02

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

因为是口胡,所以并没有代码