快速幂

快速幂

 

由于数据比较大,所以我们不可能直接求。

我们可以考虑把拆分成其对应的二进制形式,然后进行求解。

比如说:a = 4, b = 5

那么b的二进制形式就是: 0101

那么4^5 = 4^(2^2+2^0) = 4^2^2 * 4^2^0

由于二进制中相邻两位存在2倍关系,不管b的最后一位是否为1,a都要平方,如果b的最后一位是1,那么结果就乘上a,如果是0,那么就不乘。

模板:

#include <iostream>
using namespace std;
typedef long long LL;
int  n;

LL qmi(int a, int k, int p)
{
    LL res = 1;
    while(k)
    {
        if(k&1) res = (res * a) % p;
        k >>= 1;
        a = (LL)a * a % p;
    }
    
    return res;
}
int main()
{
    cin >> n;
    while(n--)
    {
        int a, k, p;
        cin >> a >> k >> p;
        cout << qmi(a, k, p) << endl;
    }
    
    return 0;
}

 

上一篇:kali配置IP地址


下一篇:vue学习18-过滤器