最近做了一个关于幂取模的题目,起初本来是想用pow函数,但后来发现使用pow函数会出现精度缺失的情况,然后就尝试寻找其他的方法。
第一种:直接法
int mypow(int a,int b,int c){
a=a%c;
int ans=1;
while(b--){
ans=(ans*a)%c;
}
}
第二种:递归法
int mypow(int a,int b,int c){
a=a%c;
if(b==0){
return 1;
}else{
return (a*mypow(a,b-1,c))%c
}
}
第三种:快速求幂取模法
int mypow(int a,int b,int c){
a=a%c;
int ans=1;
while(b!=0){
if(b%2==1){
ans=(ans*a)%c;
}
b/=2;
a=(a*a)%c;
}
}
位运算:
int mypow(int a,int b,int c){
a=a%c;
int ans=1;
while(b>0){
if(b&1){
ans=(ans*a)%c;
}
b>>=1;
a=(a*a)%c;
}
}