逆元是很有用的东西。
设
p=ki+r
,
ki+r≡0(modp)k×r−1+i−1≡0(modp)i−1≡−pi×(pmodi)(modp)
这样就可以线性推逆元了。
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 3000006
#define LL long long
using namespace std;
int n,p,inv[maxn];
int main(){
freopen("inverse.in","r",stdin);
freopen("inverse.out","w",stdout);
scanf("%d%d",&n,&p);
inv[1]=1;
for(int i=2;i<=n;i++)inv[i]=(p-(LL)p/i*inv[p%i]%p)%p;
for(int i=1;i<=n;i++)printf("%d\n",inv[i]);
return 0;
}