快速幂之大数乘法

题目:

给定a,b,c,要求按照以下程序计算ans:
ans=1
for(i=1;i<=b;i++){
ans=ans*a;
}
ans%=c
输出ans

模板

ll qpow_mod(ll a, ll n, ll mod) {
    
    
    ll ret = 1;
    while (n) {
    
    
        if (n & 1) ret = qmul(ret, a, mod);
        a = qmul(a, a, mod);
        n >>= 1;
    }
    return ret;
}

实际应用

代码`#include <iostream>
#define IOF ios_base::sync_with_stdio(0)
#define ll long long
using namespace std;
ll a, b ,c;

ll qmul(ll a, ll b, ll mod) {
    
    
    ll res = 0;
    while (b) {
    
    
        if (b & 1) res = (res + a) % mod;
        (a <<= 1) %= mod;
        b >>= 1;
    }
    return res;
}

ll qpow_mod(ll a, ll n, ll mod) {
    
    
    ll ret = 1;
    while (n) {
    
    
        if (n & 1) ret = qmul(ret, a, mod);
        a = qmul(a, a, mod);
        n >>= 1;
    }
    return ret;
}

int main(){
    
    
    IOF;
    while (cin >> a >> b >> c){
    
    
        cout << qpow_mod(a, b, c) << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wuyvle/article/details/113760679