[AcWing 876] 快速幂求逆元

image
image

复杂度 O(log(k)) (k 是指数)

总体复杂度 105×log(2×109)4×106


点击查看代码
#include<iostream>

using namespace std;
typedef long long LL;

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()
{
    int n;
    scanf("%d", &n);
    while (n --) {
        int a, p;
        scanf("%d %d", &a, &p);
        if (a % p == 0)  puts("impossible");
        else    printf("%lld\n", qmi(a, p - 2, p));
    }
    return 0;
}

  1. 乘法逆元
    image
    x 表示 b 的逆元,证明如下:在 modm 的情况下, aba×xb×aba×b×xaa×b×xb×x1
    由费马小定理:如果 p 是一个质数,而整数 a 不是 p 的倍数,则有 ap11 ( modp)
    可得 bp1=b×bp21 ,在上面已经推出 b×x1 ,故 bp2 即为 b 的逆元 x
  2. 快速幂模板
    amodp=0 时输出 "impossible";
    否则就用快速幂求 ap2modp 的值;
posted @   wKingYu  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
欢迎阅读『[AcWing 876] 快速幂求逆元』
点击右上角即可分享
微信分享提示