Aplicação de dicotomia (potência rápida)

Insira a descrição da imagem aqui
Para esse problema, o uso de travessia comum é um pouco inadequado, a complexidade é muito alta.
Aqui você pode usar o método de potência rápida baseado na idéia de dicotomia, também chamada dicotomia. Como segue:Insira a descrição da imagem aqui

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;
	}
}

A condição if (b% 2 == 1) pode ser substituída por if (b & 1), porque b & 1 está localizado na operação e avalia se o último bit de b é 1; portanto, quando b é ímpar, b & 1 retorna 1 e a condição if é estabelecida.

Publicado 19 artigos originais · elogiado 2 · visitas 746

Acho que você gosta

Origin blog.csdn.net/zan1763921822/article/details/104280674
Recomendado
Clasificación