求x的n次方对mod(1e9+7)取模,当n巨大()时,连快速幂取模也不行。此时用下面的方法:
C++:
#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int main(){
char n[100001];
int x;
cin>>x>>n;//x是底数,n是指数
long long len=strlen(n),t=0,i,ans=1;
for(i=0;i<len;i++)t=(t*10+n[i]-'0')%(mod-1);
while(t>0){
if(t&1) ans=ans*x%mod;
x=x*x%mod;
t>>=1;
}
cout<<ans<<endl;
}
python3有更简短的写法:
x,n=map(int,input().split())
print(pow(x,n,10**9+7))