~~
一,大批量处理逆元
~~
#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
const ll maxn=1e6+20;
ll inv[maxn]={0,1};//一的逆元为 1,0的逆元tan90度
int main()
{
ll n,p,i;
cin>>n>>p;//p要为素数
//要计算到多少n就为多少
for(i=2;i<=n;i++){
inv[i]=p-p/i*inv[p%i]%p;//inv的里面是p%i<i,外面是p/i;
printf("%lld在 mod %lld 下的逆元为%lld\n",i,p,inv[i]);
}
}
**
二,单独计算逆元
**
#include<iostream>
using namespace std;
typedef long long ll;
const ll maxn=1e6+20;
const ll mod=1000000007;//计算对谁的逆元就把mod的值改为谁
ll suan(ll base,ll zhi)
{
ll ans=1;
while(zhi){
if(zhi&1){
ans=base*ans%mod;
}
zhi=zhi>>1;
base=base*base%mod;
}
return ans;
}
int main()
{
ll n;
while(cin>>n){
cout<<suan(n,mod-2)<<endl;
}
}