您的位置:首页 > 其它

【快速幂取模】【AOJ-569】乘的更快

2014-02-20 17:48 246 查看
Description
上初中的时候我们就学会了幂乘运算,可是我们却不知道对于高阶的幂乘,出结果的方法比较慢,那么你有什么更好的方法吗?

Input
第1行,一个整数N(1<=N<=1000),表示要计算的数据组数
第2-N+1行,每行两个整数,第1个是x(1<=x<=100),表示底数,第2个是y(0<=y<=10000000),表示指数。

Output
对于每一组输入的数据给出幂乘的结果x^y(x的y次方),由于结果可能非常大,要求对99991取余。

Sample Input
OriginalTransformed
3
2 3
5 10
3 0


3[EOL]
2[SP]3[EOL]
5[SP]10[EOL]
3[SP]0[EOL]
[EOF]


Sample Output
OriginalTransformed
8
66498
1


8[EOL]
66498[EOL]
1[EOL]
[EOF]


/**************************************************************************************************************
思路:快速幂取模
注意:要把int类型的x转化为long long 或__int64
**************************************************************************************************************/
#include <cstdio>
int pow_mod(int x, int y);
int main()
{
freopen("data.in", "r", stdin);
int n;
scanf("%d", &n);
while(n--)
{
int x, y;
scanf("%d %d", &x, &y);
printf("%d\n", pow_mod(x, y));
}
return 0;
}

int pow_mod(int x, int y)
{
x = (__int64)x;
__int64 ans = 1 , base = x;
if(!y)
return 1;
while(y)
{
if(y & 1)
ans = ans * x % 99991;
x = x * x % 99991;
y >>= 1;
}
return (int)ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: