乘法逆元的几种计算方法
乘法逆元是数论中重要的内容,也是 ACM 中常用到的数论算法之一。所以,如何高效的求出乘法逆元是一个值得研究的问题。
这里我们只讨论当模数为素数的情况,因为如果模数不为素数,则不一定每个数都有逆元。
定义
在 mod p的意义下我们把 xx 的乘法逆元写作 x ^ {-1}x−1。
乘法逆元有如下的性质:
乘法逆元的一大应用是模意义下的除法,除法在模意义下并不是封闭的,但我们可以根据上述公式,将其转化为乘法。
费马小定理
要求 pp 为素数。
上述公式可变形为
由乘法逆元的定义,a ^ {p - 2}ap−2 即为 aa 的乘法逆元。
使用快速幂计算 a ^ {p - 2}ap−2,总时间复杂度为 O(\log a)O(loga)。
代码
inline int pow(const int n, const int k) {long long ans = 1;for (long long num = n, t = k; t; num = num * num % MOD, t >>= 1) if (t & 1) ans = ans * num % MOD;return ans;
}
inline int inv(const int num) {return pow(num, MOD - 2);
}
扩展欧几里得
扩展欧几里得(EXGCD)算法可以在 O(\log \max(a, b))O(logmax(a,b)) 的时间内求出关于 xx、yy 的方程
的一组整数解
当 bb 为素数时,\gcd(a, b) = 1gcd(a,b)=1,此时有
时间复杂度为 O(\log a)O(loga)。
代码
void exgcd(const int a, const int b, int &g, int &x, int &y) {if (!b) g = a, x = 1, y = 0;else exgcd(b, a % b, g, y, x), y -= x * (a / b);
}
inline int inv(const int num) {int g, x, y;exgcd(num, MOD, g, x, y);return ((x % MOD) + MOD) % MOD;
}
递推法
代码
inv[1] = 1;
for (int i = 2; i <= MAXN; i++) inv[i] = ((-(MOD / i) * inv[MOD % i]) % MOD + MOD) % MOD;
下面是ACdreamers关于递推求解逆元的推导过程(个人觉得他的更好)
其实有些题需要用到模的所有逆元,这里为奇质数。那么如果用快速幂求时间复杂度为,
如果对于一个1000000级别的素数,这样做的时间复杂度是很高了。实际上有的算法,有一个递推式如下
它的推导过程如下,设,那么
对上式两边同时除,进一步得到
再把和替换掉,最终得到
初始化,这样就可以通过递推法求出模奇素数的所有逆元了。
另外模的所有逆元值对应中所有的数,比如,那么对应的逆元是。
乘法逆元的几种计算方法相关推荐
- 求乘法逆元的几种方法
(数学渣,下面的文字可能有误,欢迎指教) 乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广.记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p) 加减 ...
- 乘法逆元的三种求解方法
目录 乘法逆元小结 逆元的定义 求解逆元的方法 1. 快速幂 测试代码 2.拓展欧几里得 测试代码 3.线性算法 例题 AC代码 乘法逆元小结 参考自:点击此处 乘法逆元,一般用于求(a / b)(m ...
- java求乘法逆元的代码_求乘法逆元的几种方法
(数学渣,下面的文字可能有误,欢迎指教) 乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广.记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p) 加减 ...
- 乘法逆元总结 3种基本方法
逆元 逆元(inverse element)是在取模意义下,不能直接除以一个数,而要乘以它的逆元:a*b ≡\equiv≡ 1 (mod p) , 那么a和b互为模p意义下的逆元,比如要计算(x/a) ...
- 计蒜客 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B coin(求乘法逆元)
Bob has a not even coin, every time he tosses the coin, the probability that the coin's front face u ...
- 乘法逆元3种方法总结[最全]
建议大家可以先去看看这篇博文 (https://www.cnblogs.com/dupengcheng/p/5487362.html) 乘法逆元:ax≡1 (mod p) 这个等式用中文描述就是 a乘 ...
- zoj-3624(Count Path Pair)组合数+乘法逆元
题意:给你4个点A(0,0),B(p,0),C(m,q),D(m,n)问:A-->D&& B-->C在不相交的情况下有多少种方法 此题在比赛中题目理解错了,英语水平还是太弱 ...
- 逆元~(乘法逆元及其应用)
数论倒数,又称逆元(因为我说习惯逆元了,下面我都说逆元) 先来引入求余概念 (a + b) % p = (a%p + b%p) %p (对) (a - b) % p = (a%p - b ...
- 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)
虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...
最新文章
- 使用plsql连接远程oracle数据库配置
- centos普通用户设置sudo权限
- 迭代最近点(Iterative Closest Point, ICP)算法及matlab实现
- Python3 文件操作
- Oracle中joint,oracle support
- 使用expdp导出时评估所需存储容量大小
- 学习Python第二天
- 单一工作流的执行➕回滚框架初步想法(基于事件驱动模式)
- ArrayList 和LinkedList
- 庆祝我的第一个WebGis完成-c#+MapXtreme2004
- js时间戳转化成日期格式
- 平衡树(模板+文艺平衡树)
- 【Keil5】关于keli5使用ST-link下载的配置方法
- 论文写作之WPS安装Mathtype插件编写数学公式
- 【java】汽车租赁系统_结课作业
- SQLServer用COMPUTE 和 COMPUTE BY 汇总数据
- win7计算机序列号怎么查,怎么查看win7序列号
- 【​观察】一部《天龙八部》,缘起“六脉神剑”
- 强力数据恢复精灵 v1.9.0
- 亮紫色晶体meso四(4-氨基苯基)卟啉TAPP/TAPPPt/TAPPCo/TAPPCd/TAPPZn/TAPPPd/TAPPCu/TAPPNi/TAPPFe/TAPPMn金属配合物-齐岳供应
热门文章
- bootstrap fileinput上传组件和form表单一起提交
- 使用hibernate4出现HHH000424
- 有序列表、无序列表、定义列表
- NoSuchMethodException: init [class android.content.Context, interface android.util.AttributeSet...
- 解释型语言-shell
- 数据分析——因子模型聚类分析
- 腾讯优图开源深度学习框架ncnn,主打手机端,同类cpu框架最快
- ActionContext介绍
- 满屋研选获1亿元B轮融资,华创资本领投,五岳资本、金地集团、治平资本等跟投... 1
- c和java共同点_java和c语言有什么共同点?