NOJ 网络赛 C题 特技的幂

题目:

特技的幂

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

题目描述

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



输入

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

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

输出

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

样例输入

2
2 4
2 100000000

样例输出

16
494499948

题目来源

kojimai



题目分析:

              我把这一道题理解为“赤裸裸的快速幂”(不知道是否正确理解了出题人的思路,以下代码仅供参考)。本来想去抢FB的,但是一直没敢交,自后交的时候还因为数据的long long 的WA了一次。


代码如下:

/*
 * a.cpp
 *
 *  Created on: 2015年3月29日
 *      Author: Administrator
 */

#include <iostream>
#include <cstdio>

using namespace std;

long long quickpow(long long m, long long n, long long k) {
	long long b = 1;
	while (n > 0) {
		if (n & 1){
			b = (b * m) % k;
		}
		n = n >> 1;
		m = (m * m) % k;
	}
	return b;
}

int main() {
	int t;
	scanf("%d", &t);

	long long aa = 1000000007LL;

	while (t--) {
		long long a, b;
		scanf("%I64d%I64d", &a, &b);
		printf("%I64d\n", quickpow(a, b, aa));
	}

	return 0;
}






你可能感兴趣的:(NOJ 网络赛 C题 特技的幂)