Portail du titre original
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;
}