求 b^n mod m ,其中 b n m都是大整数
#include <stdio.h>
int GetHighBitPos(int n){
int pos = 31;
while(pos >= 0){
if((1 << pos) & n){
return pos;
}
--pos;
}
return pos;
}
int mpower(int b,int n,int m){
int pos = GetHighBitPos(n); // 获取n的二进制最高位为1的位置
int x = 1;
int power = b % m;
int ipos = 0; // n 的bit 位索引,从第0位到第pos位
while(ipos <= pos){
if( (1 << ipos) & n){
x = x * power % m;
}
power = power * power % m;
++ipos;
}
return x;
}
int main(){
int b = 0;
int n = 0;
int m = 0;
printf("Enter b n m: ");
scanf("%d %d %d",&b,&n,&m);
printf("%d^%d mod %d = %d\n",b,n,m,mpower(b,n,m));
return 0;
}
输入
3 644 645
输出
3^644 mod 645 = 36