快速幂算法

特技的幂

题目描述
幂运算是常见的数学运算之一,其原理是用同一个数相乘多次,但是有的时候当幂指数特别大的时候,这样的运算就太浪费时间。请大家学会在幂中加特技,让幂运算的效率提高到可以接受的程度。

输入
第一个行一个整数T,表示有T组数据
每组数据,输入x,y 求x的y次幂 (2≤ x ,y≤10^9)

输出
每组数据输出一个整数,表示幂运算对1000000007取模后的结果

样例输入
2
2 4
2 100000000

样例输出
16
494499948

题目来源
kojimai

解析参见我转载的一篇文章

#include <cstdio>
const int MOD=1e9+7;
#define ll long long
void quick_pow(ll x, ll y);
int main()
{
    ll T, x, y;
    scanf("%I64d", &T);
    while(T--)
    {
        scanf("%I64d%I64d", &x, &y);
        quick_pow(x, y);
    }
}

void quick_pow(ll x, ll y)
{
    ll ans=1;
    while(y>0)
    {
        if(y%2)
            ans=(ans*x)%MOD;
        y/=2;
        x=(x*x)%MOD;
    }
    printf("%I64d\n", ans);
}

你可能感兴趣的:(算法,数学)