1..!!两数相乘考虑溢出
2.线性求1~mod内inv
3.若求单个排列数,可约分,o(n)直接求,无需预处理
#include<iostream>
#include<cstring>
#include<vector>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int nn=3e6+50;
inline long long read() {
long long x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x*f;
}
inline void write(int x) {
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
int inv[nn];
int main ()
{
int n,p;
cin>>n>>p;
inv[1]=1;
for(int i=2;i<=n;++i)
{
inv[i]=1ll*(p-p/i)*inv[p%i]%p;
}
for(int i=1;i<=n;++i)
{
write(inv[i]);
printf("\n");
}
return 0;
}