Puissance rapide a * b% c

2020.12.30 Commencez à apprendre l'algorithme AcWing "Algorithm Competition Advanced Guide";
téléchargez un blog sur CSDN pour faciliter l'examen.

Insérez la description de l'image ici

//wecccccccc
//2020.12.30
#include <iostream>
using namespace std;
typedef long long int ll;

ll fast_power(ll a, ll b, ll c) {
    
    
	ll ans  = 1;
	a %= c;//防止一开始输入的值过大
	while (b) {
    
    
		if (b & 1) {
    
    
			ans = (ans * a) % c;
		}
		a = (a * a) % c;
		b >>= 1;
	}
	return ans;
}

int main() {
    
    
	ll c, b, a, ans1;
	cin >> a >> b >> c;
	ans1 =  fast_power(a, b, c);
	cout << ans1 << endl;
	return 0;
}

Cependant, si vous écrivez 123456789 0 1

La réponse sera erronée car b = 0 et n'entrera pas dans la boucle, alors donnez d'abord ans% c.

Code AC:

//Wecccccccc
//12.30
#include <iostream>
using namespace std;
typedef long long int ll;
int main()
{
    
    
    ll a,b,c;
    cin>>a>>b>>c;
    ll ans = 1 % c;
    a %=c;
    while (b)
    {
    
    
        if (b&1)
        {
    
    
            ans = (ans * a)%c;
        }
        a = (a*a)%c;
        b>>=1;
    }
    cout<<ans<<endl;
    return 0;
}

Je suppose que tu aimes

Origine blog.csdn.net/m0_51955470/article/details/111977394
conseillé
Classement