大数的n次方(快速幂)(指数最大为1e9)

问题描述:计算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;
}






你可能感兴趣的:(快速幂)