快速幂(应用:快速幂求逆元)

快速幂

(1)快速幂

\(a^k\ mod\ p\)

时间复杂度:O(\(\log\)k)

https://www.luogu.com.cn/problem/P1226

题意:求 \(a^k \ mod \ p\)

#include <cstdio>
#include <iostream>
using namespace std;

typedef long long LL;

const char nl = '\n';
//const int N =

LL qmi(int a, int k, int p){
    LL res = 1;
    while (k){
        if (k & 1) res = (LL)res * a % p;
        k >>= 1;
        a = (LL)a * a % p;
    }
    return res;
}

int main(){
    ios::sync_with_stdio(false);
//    cin.tie(nullptr);

    int a, k, p;
    while (cin >> a >> k >> p){
        cout << a << '^' << k << " mod " << p << "=" << qmi(a, k, p) % p << nl; // 1^0 mod 1=0
    }
    return 0;
}

(2)快速幂求逆元

若 a 和 p 互质,求逆元\(b^{-1}\),满足 \(\frac{a}{b} \equiv a \cdot b^{-1} \pmod {p}\)

两边同时乘以 b,得 \(a \equiv a \cdot b \cdot b^{-1} \pmod {p}\)

\(\because\) a 和 p互质

\(\therefore\) 两边同时约去 a,得 \(b \cdot b^{-1} \equiv 1 \pmod {p}\)

由费马小定理 \({a}^{p-1} \equiv 1\pmod {p}\),可得 \(b^{-1}\)\(b^{p-2} \pmod {p}\)

要求:p 一定是质数,b 不是 p 的倍数。

posted @ 2021-02-14 00:17  小燃、  阅读(73)  评论(0编辑  收藏  举报