问题描述
乘法逆元
给定整数n,p,求解1 ~n中所有整数在模p下的乘法逆元。
问题分析:
a*x=1(mob b),且a和b互质,则可以说x是a模b的逆元,即为a^-1
可根据下列对数i进行计算:
1.当i=1,其逆元f[i]=1
2.其他情况下,f[i]=(p-p/i)*f[p%i]%p;
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
long long inv[3000010],n,p;
int main()
{
cin>>n>>p;
inv[1]=1;
cout<<inv[1];
if(n>1)
{
for(int i=2;i<=n;i++)
{
inv[i]=(ll)(p-p/i)*inv[p%i]%p;
}
}
for(int i=1;i<=n;i++)
{
cout<<inv[i]<<endl;
}
}