结论:
假设取模MM
初始化设
则
推导如下:
设
根据同余定义我们可以得到
即:
两边同时乘上i×k的逆元i×k的逆元
即
即
即
这时我们得到了递推式,要求inv[i]inv[i]
其实答案就是
我们将一开始的设的t,k带入得到t,k带入得到
即:
为了防止出现负数(−Mi) % M(−Mi) % M完全可以加上一个MM即
原式化简为了
inv[i] % M=(M−Mi)×inv[M % i] % Minv[i] % M=(M−Mi)×inv[M % i] % M
推导完毕。
复杂度O(n)O(n)
code:
void init(){
inv[1] = 1;
for(int i = 2; i <= n; i++)
inv[i] = inv[M % i] * (M - M / i) % M;
}
1297



被折叠的 条评论
为什么被折叠?



