特技的幂 南邮NOJ网络选拔赛2075

特技的幂

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 479            测试通过 : 101 

题目描述

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



输入

第一个行一个整数T,表示有T组数据

每组数据,输入xxy次幂 (2 x ,y10^9)

输出

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

样例输入

2
2 4
2 100000000

样例输出

16
494499948

#include <iostream>
#include <cstdio>
using namespace std;
int64_t mod_exp(int64_t a, int64_t b, int64_t c)        //¿ìËÙÃÝÈ¡Óàa^b%c
{
    int64_t res, t;
    res = 1 % c;
    t = a % c;
    while (b)
    {
        if (b & 1)
        {
            res = res * t % c;
        }
        t = t * t % c;
        b >>= 1;
    }
    return res;
}
int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        int64_t x,y;
        cin >> x>>y;
        cout << mod_exp(x, y, 1000000007) << endl;
    }
    return 0;
}

加特技的幂,也是醉了~~~

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2015-03-29 21:26  Tob__yuhong  阅读(123)  评论(0编辑  收藏  举报

导航