void exgcd(int a, int b, int& x, int& y) { if (b == 0) { x = 1; y = 0; return; } exgcd(b, a % b, y, x); y -= a / b * x; }
inv[i] = 1; for (int i = 2; i <= n; i++) { inv[i] = (ll)(p - p / i) * inv[p % i] % p; }
最后更新于3年前
因为 ax≡1(modb)ax \equiv 1 \pmod bax≡1(modb) ;
所以 ax≡ab−1(modb)ax \equiv a^{b-1} \pmod bax≡ab−1(modb) (根据 费马小定理 );
所以 x≡ab−2(modb)x \equiv a^{b-2} \pmod bx≡ab−2(modb) 。
求出 1,2,...,n1,2,...,n1,2,...,n 中每个数关于 ppp 的逆元。
首先,很显然的 1−1≡1(modp)1^{-1} \equiv 1 \pmod p1−1≡1(modp) ;
然后,设 p=ki+j,j<i,1<i<pp=ki+j,j<i,1<i<pp=ki+j,j<i,1<i<p ,再放到 mod p\mod pmodp 意义下就会得到: ki+j≡0(modp)ki+j \equiv 0 \pmod pki+j≡0(modp) ;
两边同时乘 i−1,j−1i^{-1},j^{-1}i−1,j−1 :
kj−1+i−1≡0(modp)kj^{-1}+i^{-1} \equiv 0 \pmod pkj−1+i−1≡0(modp) ;
i−1≡−kj−1(modp)i^{-1} \equiv -kj^{-1} \pmod pi−1≡−kj−1(modp) ;
i−1≡−(pi)(p mod i)−1i^{-1} \equiv -(\frac{p}{i}) (p \bmod i)^{-1}i−1≡−(ip)(pmodi)−1 ;