版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Xiblade/article/details/82823568
#include<cstdio>
// 快速幂,计算(a ^ b) % m 递归写法
long long binaryPow(long long a, long long b, long long m){
// b 为 0 ,返回一个1
if(b == 0){
return 1;
}
// b 为奇数,分离一个乘幂
// if(b % 2 == 1){
if(b & 1){ // 这是判断奇数比较快的一个方法
return a * binaryPow(a, b - 1, m) % m; // 这里另外整除一个m一定要记得加上
} else{ // b 为偶数
long long mul = binaryPow(a, b / 2, m);
return mul * mul % m;
}
}
long long binaryPow_iter(long long a, long long b, long long m){
long long ans = 1; // 累乘的东西
while(b > 0){
if(b & 1){ // b 的二进制位为1 则累乘
ans = ans * a % m;
}
a = a * a % m;// 计算下一位置的a
b >>= 1; // b 右移一个二进制位
}
return ans;
}
int main(){
printf("%d\n", binaryPow(5, 3, 10)); // 5
printf("%d", binaryPow_iter(5, 3, 10));
return 0;
}