您的位置:首页 > 其它

hpuoj【1037】一个简单的数学题 【数学】&&【快速幂】

2017-07-25 16:04 225 查看
  


1037: 一个简单的数学题 [数学]

时间限制: 1 Sec 内存限制:
128 MB

提交: 251 解决:
38 统计


题目描述

小明想要知道$a^b$的值,但是这个值会非常的大。
所以退而求其次,小明想让你帮他求出来$(a^b) \% c$的值。


输入

第一行为一个数$n$,表示有$n$组数据。
每组数据有三个整数$a$,$b$,$c$。
$1 \leq a,b,c \leq 50000$
$1 \leq n \leq 1100$


输出

每组数据有一行输出:输出$(a^b) \%c $。


样例输入

2
2 3 3
2 3 2


样例输出

2
0

对于本题,如果先计算a^b,很可能会超时,需要使用快速幂算法。

a^b%c=[(a^2)^(b/2)]%c   b是偶数;

a^b%c=[(a^2)^(b/2)*a]%c   b是奇数;


#include<cstdio>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b,c,d=1;
scanf("%d%d%d",&a,&b,&c);
a=a%c;
while(b>0)
{
if(b%2==1)
d=(d*a)%c;
b/=2;
a=(a*a)%c;
}
printf("%d\n",d);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: