【刷题】数学知识——快速幂:快速幂求逆元

逆元定义

a a a能被 b b b整除,且 b b b m m m互质,则一定存在一个整数 x x x,使得
a / b ≡ a ∗ x ( m o d   m ) a/b \equiv a * x \quad (mod \ m) a/bax(mod m),则 x x x b b b在模 m m m下的乘法逆元,记作 b − 1 ( m o d   m ) b^{-1} \quad (mod \ m) b1(mod m)

逆元的三条性质

  • b ∗ b − 1 ≡ 1 ( m o d   m ) b*b^{-1} \equiv 1 \quad (mod \ m) bb11(mod m)

  • b b b存在乘法逆元的充要条件 b b b m m m互质

  • m m m为质数时, b m − 2 b^{m-2} bm2 b b b的乘法逆元


性质1证明

因为 a a a b b b的整数倍,所以 a = k b a=kb a=kb
a / b ≡ a ∗ b − 1 ( m o d   m ) a/b \equiv a * b^{-1} \quad (mod \ m) a/bab1(mod m)
a / b ∗ b ≡ a ∗ b − 1 ∗ b ( m o d   m ) a/b*b \equiv a * b^{-1}*b \quad (mod \ m) a/bbab1b(mod m)
k b ≡ k b ∗ b − 1 ∗ b ( m o d   m ) kb \equiv kb * b^{-1}*b \quad (mod \ m) kbkbb1b(mod m)
又因为b和m互质,可消去b
k ≡ k ∗ b − 1 ∗ b ( m o d   m ) k \equiv k * b^{-1}*b \quad (mod \ m) kkb1b(mod m)
k ∗ ( 1 − b − 1 ∗ b ) ≡ 0 ( m o d   m ) k *(1 - b^{-1}*b) \equiv 0 \quad (mod \ m) k(1b1b)0(mod m)
因为 a a a是任意数,所以 k k k也是任意数,对于任意 k k k上式都要满足,所以
b − 1 ∗ b ≡ 1 ( m o d   m ) b^{-1}*b \equiv 1 \quad (mod \ m) b1b1(mod m)

性质2证明

当b存在乘法逆元时,根据性质1有 b − 1 b ≡ 1 ( m o d   m ) b^{-1}b \equiv 1 \quad (mod \ m) b1b1(mod m)
移项得 1 − b b − 1 ≡ 0 ( m o d   m ) 1-bb^{-1} \equiv 0 \quad (mod \ m) 1bb10(mod m),即 1 − b b − 1 1-bb^{-1} 1bb1可被 m m m整除
等价于 m x = 1 − b b − 1 mx=1-bb^{-1} mx=1bb1
a = m a=m a=m y = b − 1 y=b^{-1} y=b1,则有
a x = 1 − b y ax=1-by ax=1by
移项得 a x + b y = 1 ax+by=1 ax+by=1
根据裴蜀定理推论: a a a b b b互质的充要条件是方程 a x + b y = 1 ax+by=1 ax+by=1有整数解
所以a(也就是m)和b互质。

当a和b互质时,同样根据裴蜀定理推论, a x = 1 − b y ax=1-by ax=1by有整数解。
a = m a=m a=m,又因为 x x x时整数,则 1 − b y 1-by 1by能被 m m m整除
1 − b y ≡ 0 ( m o d   m ) 1-by \equiv 0 \quad (mod \ m) 1by0(mod m) b y ≡ 1 ( m o d   m ) by \equiv 1 \quad (mod \ m) by1(mod m)
因此这个整数 y y y就是 b b b的逆元。

性质3证明

费马小定理,我们知道当p是质数时,有 a p − 1 ≡ 1 ( m o d   p ) a^{p-1} \equiv 1 \quad (mod \ p ) ap11(mod p)
也就是 a ∗ a p − 2 ≡ 1 ( m o d   p ) a*a^{p-2} \equiv 1 \quad (mod \ p ) aap21(mod p)
根据定义知 a p − 2 a^{p-2} ap2 a a a的逆元


快速幂求逆元

在这里插入图片描述

例如 a = 2 , p = 3 a=2, p=3 a=2,p=3,则 2 3 − 2 = 2 2^{3-2}=2 232=2 2 ∗ 2 ≡ 1 ( m o d   3 ) 2*2 \equiv 1 \quad (mod \ 3 ) 221(mod 3),2在mod 3下的逆元是2。
a a a p p p互质时,存在乘法逆元,又因为 p p p是质数,所以只要 a a a p p p的倍数就输出impossible。

#include <iostream>
using namespace std;

int n, a, p;

int quick_pow(int a, int b, int p) {
    int ans = 1;
    while(b) {
        if (b & 1) ans = (long long) ans * a % p;
        b >>= 1;
        a = (long long) a * a % p;
    }
    return ans;
}

int main() {
    scanf("%d", &n);
    while(n --) {
        scanf("%d%d", &a, &p);
        if (!(a % p)) printf("impossible\n");
        else printf("%d\n", quick_pow(a, p - 2, p));
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值