给定 n,p 求 1∼n 中所有整数在模 p 意义下的乘法逆元。
n<=3e6 ,求单个的逆元且p为素数,用费马小定理方便且log(N)
若p不为素数,但互质,用拓欧,也是log(N),打表方便用递归法O(N)打表
#include <iostream>
#include <cstdio>
typedef long long ll;
using namespace std;
const int maxn=3e6+100;
ll n,p;
ll inv[maxn];
int main()
{
while(scanf("%lld%lld",&n,&p)!=EOF)
{
inv[1]=1;
for(int i=2;i<=n%p;i++)
inv[i]=(p-p/i)*inv[p%i]%p;
for(int i=1;i<=n;i++)
printf("%lld\n",inv[i%p]);
}
return 0;
}