给定质数p,求出1至p-1的逆元
i-1 ≡ -[p/i]*(p%i)-1
证明:
i*[p/i]+p%i ≡ 0
-i*[p/i] ≡ p%i
i*(-[p/i]*(p%i)-1) ≡ 1
#include<cstdio>
#include<cstring>
const int N=3e6+7;
int inv[N];
int main()
{
int n,p;
scanf("%d %d",&n,&p);
inv[1]=1;
printf("1\n");
for(int i=2;i<=n;i++)
{
inv[i]=-( (long long)(p/i)*inv[p%i]%p )+p;
printf("%d\n",inv[i]);
}
return 0;
}
类似的,阶乘的逆元也可以线性求出
a*x=1(mod p)
我们从高位的阶乘递推到低位的
a/i*x*i=1(mod p)