推导:
1.根据题目,已知
2.根据费马小定理: 假如p是 质数,且(a,p)=1,那么
这里另a=n,因为根据n的范围,n小于p,且p是质数,显然n和p互质,那么公式即可变换为:
3.结合
有:
两侧同除以n:
则只需要求出即可
快速幂代码模板:
//求(a^b)mod c a、b、c都要是long long int的类型
long long int pow_m(long long int a,long long int b,long long int c){
a=a%c;//看情况,可加可不加
long long int res=1;
while(b){
if(b&1){//b是奇数,那么b&1=1
res=(res*a)%c;
}
a=(a*a)%c;//注意要取模
b=b>>1;
}
return res;
}
代码:
#include<bits/stdc++.h>
using namespace std;
long long int n;
long long int p=1000000007;
long long int pow_m(long long int a,long long int b,long long int c){
a%=c;
long long int res=1;
while(b){
if(b&1==1){//奇数
res=(res*a)%c;
}
a=(a*a)%c;
b=b>>1;
}
return res;
}
int main( )
{
cin>>n;
cout<<pow_m(n,p-2,p);
return 0;
}