乘法逆元

乘法逆元求法

不想你离开。 提交于 2019-12-02 12:27:51
原创建时间:2018-08-05 08:24:19 数论中的重要内容 注意:本文只讨论模数为质数的情况,因为当模数为合数时,不一定所有数都有逆元 定义 在 \(\bmod\ p\) 的意义下,我们把 \(x\) 的乘法逆元写作 \(x^{-1}\) 。乘法逆元有这样一条性质: \[x \times x^{-1} \equiv 1\ (\bmod\ p)\] 乘法逆元有什么用呢? 模意义下的 除法运算 ! 除法运算对于模运算来说并不是「封闭」的,所以我们可以把除法 转化 成乘法 费马小定理求法 前置知识:「快速幂」 \(a^{p-1} \equiv 1 (\bmod\ p)%\) 经过变形,可得 \(a \times a^{p-2} \equiv 1(\bmod\ p)\) 由定义可得, \(a\) 的乘法逆元就是 \(a^{p-2}\) 这就要用到「快速幂」 inline int slowPower(int a, int b, int p) { int ans = 1; while (b) { if (b & 1) ans = 1ll * ans * a % p; a = 1ll * a * a % p; b >>= 1; } return ans; } inline int invMod(int x, int p) { return slowPower(x, p - 2, p);

乘法逆元 学习总结

為{幸葍}努か 提交于 2019-11-29 10:38:40
基本都是抄的大神写好的东西,主要作为一个复习,加深印象。 定义:若整数 b,m 互质,并且 b|a(b整除a),则存在一个整数 x,使得 a/b ≡ a * c (mod m) 。 则称 x 为 b 的模 m 乘 法逆元,记为 b -1 (mod m) 。 那么我们如何求 b -1 (mod m) ? 根据定义,a/b ≡ a * b -1 ≡ a/b * b * b -1 ( mod m ),那么 b * b -1 ≡ 1 (mod m)。 到这里可以用两种方法求解 b -1 (mod m) : 1、费马小定理。   费马小定理:若p是质数,则对于任意整数 a,有 a p ≡ a (mod p)。那么 b p ≡ b (mod p) → b * b p-1 ≡ b (mod p) → b * b p-2 ≡ 1 (mod p)。因此, 当模数 p 为质数时 ,b p-2 即为 b -1 (mod p) 。因此我们可以使用快速幂求出逆元。 int qpow(int i,int k,int mod) { int res=1; while(k) { if(k&1) res=(LL)res*i%mod; i=(LL)i*i%mod; k>>=1; } return res; } int main() { int invb=qpow(b,p-2,p); //p是质数,b的逆元就是b^(p

浅谈模质数意义下的乘法逆元

廉价感情. 提交于 2019-11-26 19:29:40
原文链接 参考文章 www.luogu.org/blog/zyxxs/post-xiao-yi-jiang-tan-qian-tan-sheng-fa-ni-yuan 什么是乘法逆元 若整数$b,m$互质,并且$b|a$,若存在一个整数$x$,使得$a / b \equiv a \ast x (mod \text{ } m)$,称$x$为 $b$的模$m$乘法逆元 。 乘法逆元的用处 有时候,我们需要求$a/b \text{ } mod \text{ } p$,用朴素的方法,我们只能在$a$上不断加$p$,直到它能被 bb 整除为止,当$a,b,p$都很大的时候,自然是凉凉了。这时,我们就可以用逆元方便的求解了。 乘法逆元的求法 进入到了本文最关键的部分,如何求乘法逆元? 费马小定理 费马小定理: 当$p$是质数的时候,$a^{p-1} \equiv 1 (mod \text{ } p) $ 那么将$a^{p-1}$拆开来,就得到了$a \ast a^{p-2} \equiv (mod \text{ } p)$ 所以,$a^{p-2}$就是$a$模$p$意义下的乘法逆元。 缺点:用快速幂计算,当$p$比较大的时候,速度比较慢。 代码: #include <algorithm> #include <cstdio> #include <iostream> using namespace