规定p为质数,且1^(−1)≡1(modp)
设p=k∗a+b,b<a,1<a<p,即k∗a+b≡0(modp)
两边同时乘以a^(−1)∗b^(−1)得到
k∗b^(−1)+a^(−1)≡0(modp)
a^(−1)≡−k∗b^(−1)(modp)
a^(−1)≡−p/a∗(pmoda)^(−1)(modp)
从头开始扫一遍即可,时间复杂度O(n)
代码:
int inv[maxn];
inv[1] = 1;
for(int i = 2; i < maxn; i++)
inv[i] = (p - p / i) * inv[p % i] % p;