快速幂求逆元

求逆元:

\[{解 b x \equiv 1\pmod{p}} \]

当b和p不互质时,bx一定是p的倍数,模p一定为0(不为1),此方程无解;

当b和p互质,p是质数时,可以由费马小定理得:

\[\begin{gather*} b^{p - 1} \equiv 1\pmod {p} \\ 即b \cdot b^{p - 2} \equiv 1\pmod p \\ 故x = b^{p - 2} \end{gather*} \]

因此,在\(p\)是质数的前提下且\(p\)\(b\)互质,\(b\)的逆元\(\pmod m\)就是\(b ^ {b - 2}\)

#include<iostream>
using namespace std;

typedef long long ll;

int n;

ll ksm(int a, int k, int p){
    ll ans = 1;

    while (k){
        if (k & 1) ans  = (ll) ans * a % p;
        a = (ll) a * a % p;
        k >>= 1;
    }

    return ans % p;
}

int main(void){
    cin >> n;
    while (n -- ){
        int a, p;
        cin >> a >> p;
        if(a % p == 0) cout << "impossible" << endl;
        else cout << ksm(a, p - 2, p) << endl;
    }
    return 0;
}
posted @ 2021-12-20 20:22  tsrigo  阅读(38)  评论(0编辑  收藏  举报