二分法の適用(高速パワー)

ここに画像の説明を挿入
この問題では、通常のトラバーサルを使用することは少し不適切であり、複雑さが高すぎます。
ここでは、二分法とも呼ばれる二分法のアイデアに基づく高速電力法を使用できます。次のように:ここに画像の説明を挿入

typedef long long LL;
//递归的写法
LL BINARYPOW(LL a,LL b,LL m){
	if(b==0) return 1;
	//b为奇数,转换为b-1
	if(b%2==1) return a*binaryPow(a,b-1,m)%m;
	else{
		LL mul=binaryPow(a,b/2,m);
		return mul*mul%m;
	}
}

条件if(b%2 == 1)はif(b&1)に置き換えることができます。これは、b&1が演算に配置され、bの最後のビットが1かどうかを判断するため、bが奇数の場合、b&1は1を返し、if条件が成立するためです。

元の記事を19件公開しました 賞賛されました2 訪問数746

おすすめ

転載: blog.csdn.net/zan1763921822/article/details/104280674