快速幂模板
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll qsm(ll a,ll b)
{
ll ans = 1,base = a;
while(b != 0)
{
if(b & 1)
{
ans *= base;
ans%=mod;
}
base *= base;
base%=mod;
b >>= 1;
// cout<<ans<<endl;
}
return ans;
}
int main()
{
ll a,b;
freopen("data.txt","r",stdin);// 按顺序读入(仅此一行)
while(cin>>a>>b)
cout<<qsm(a,b)<<endl;
}
处理b很大(b<=10^(100000))时的快速幂模板
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll pow_quick(ll a,string n)
{
ll b=1;
for(int i=n.length()-1;i>=0;i--)
{
int p=n[i]-'0';
ll temp=a;
//核心部分,以10为基准的快速幂计算
for(int j=1;j<=p;j++)
b=(b*a)%mod;
for(int j=1;j<10;j++)
a=(a*temp)%mod;
// cout<<b<<endl;
}
return b;
}
int main()
{
ll a;
string b;
freopen("data.txt","r",stdin);// 按顺序读入(仅此一行)
while(cin>>a>>b)
cout<<pow_quick(a,b)<<endl;
}