给出3个正整数A B C,求A^B Mod C。
例如,3 5 8,3^5 Mod 8 = 3。
Input
3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9)
Output
输出计算结果
Sample Input
3 5 8
Sample Output
3
mod好像就是取模运算3mod5=3;
本题的数据大总体乘出来会溢出,所以用到快速幂的方法,它基于数学上的的运算公式:
(a*b)MOD c=[(a mod c)*( b mod c)]mod c.非常神奇。
#include<stdio.h>
#include<math.h>
long long fastPower(long long base,long long power,long long dai){
long long result=1;
while(power>0){
if(power%2==1){
result=result*base%dai;//把奇数提出来直接取模最后power==1时result*进去
}
power/=2;//奇数与偶数/2都为偶数。
base=base*base%dai;
}
return result;
}
int main()
{
long long a,b,c;
scanf("%lld %lld %lld",&a,&b,&c);
long long ans=fastPower(a,b,c);
printf("%lld",ans);
return 0;
}
看一位大神的代码用的位运算。太厉害我不做解释了
long long fastPower(long long base,long long power,long long dai){
long long result=1;
while(power>0){
if(power&1){//这是在二进制上运行的5:101,1:001,&后为1。4:100,1 :001 &后为0;
result=result*base%dai;
}
power >>=1;//等同于power/=2;
base=base*base%dai;
}
return result;
}