P1226 [Template] Exponentiation rapide || opération de reste (Luogu)

Portail du titre original

Insérez la description de l'image ici
Idée: Il existe deux approches à cette question: la récursivité et l'itération. Ce que j'utilise ici est la méthode itérative. Tout d'abord, définissez une variable entière longue et attribuez une valeur. Ensuite, déterminez si l'extrémité binaire de l'exposant est 1, si 1 est un nombre impair, accumulez a, puis mettez la base b au carré, puis divisez l'exposant p Le binaire est décalé de 1 bit vers la droite, et ce processus est répété jusqu'à ce que p <= 0.

Référence du code

#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
    
    
	ll b,p,k,ans;
	cin>>b>>p>>k;
	ans=1;
	cout<<b<<"^"<<p<<" mod "<<k<<"=";
	while(p > 0){
    
    
		if(p & 1)//b的二进制末尾为1,即奇数
			ans = ans * b % k;
		b = b * b % k;
		p >>= 1;//将b的二进制向右移1位数
	}
	cout<<ans%k;
	return 0;
}

Je suppose que tu aimes

Origine blog.csdn.net/Bertil/article/details/106794925
conseillé
Classement