问题描述:计算m^n,其中m,n<1e9,限制时间为1s,由于数太大,结果对1000000007取余
思路:运用快速幂取模,迅速求解,不了解快速幂的朋友,可以百度一下快速幂,原理为把n转化为二进制+移位
代码如下:
#include
#define mod 1000000007;
__int64 Quick_Mod(__int64 a,__int64 b)//快速幂取模 a^b%(1e9+7)
{
__int64 ans = 1,sum = a % mod;
while(b)
{
if(b & 1)/*按位与,取b的最末位*/ ans=(ans*sum)%mod;
sum=(sum*sum)%mod;//每运算一次sum,平方一次,和b移位对应
b >>= 1;//b右移一位
}
return ans;
}
int main()
{
__int64 cas,n,m;
scanf("%I64d",&cas);
while(cas--)
{
scanf("%I64d%I64d",&m,&n);
printf("%I64d\n",Quick_Mod(m,n));
}
return 0;
}