快速幂的写法

1:

//注意事先请#define int long long,防止数据溢出
int f(int A,int B) { if(B==0) return 1; else if(B%2==0) { //如果B是偶数,则将其分成相等的两份 //于是可以先算出一份的结果,然后再乘上自身即可 //这样的写的话,递归调用的少了许多 int res=f(A,(B>>1)); return res*res%mod; } else { //与上同理,分成大小相差为1的两份 int res=f(A,(B>>1)); return A*res%mod*res%mod; } }

 

2:用while循环来写,更简单

 

 

 

3:如果是下面这样写,存在冗余。

int f(int a,int b)
{
 
	if(b==0)return 1;
	if(b==1) return a;
	if(b%2==0)
	    return f(a,b>>1)*f(a,b>>1)%mod;
	else
	    return a*f(a,b>>1)%mod*f(a,b>>1)%mod;
}

  

posted @ 2022-10-06 20:28  我微笑不代表我快乐  阅读(31)  评论(0编辑  收藏  举报