题目:
特技的幂
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 485 测试通过 : 106
题目描述
幂运算是常见的数学运算之一,其原理是用同一个数相乘多次,但是有的时候当幂指数特别大的时候,这样的运算就太浪费时间。请大家学会在幂中加特技,让幂运算的效率提高到可以接受的程度。
输入
第一个行一个整数T,表示有T组数据
每组数据,输入x,y 求x的y次幂 (2≤ x ,y≤10^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; }
时间: 2024-11-09 10:03:46