栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 逆元

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 逆元

C++ 快速幂求逆元 问题引入

定义

若 a ⋅ c = 1 ( m o d b ) acdot c= 1(modb) a⋅c=1(modb),且a与b互质,就定义c为a的逆元,记作 a − 1 a^{-1} a−1
也可以叫做c为a在mod p意义下的倒数。

应用

若需求 a b ( m o d P ) frac{a}{b}(modP) ba​(modP), 可转化为求 b ( m o d p ) b(mod p) b(modp)下的逆元,然后乘 a a a,再 m o d P modP modP, 即为所求。
即

核心思想

费马小定理
费马小定理, 只适用于模数为质数的情况,
如果p是一个质数,且a不是p的倍数则有
a ( p − 1 ) ≡ = 1 ( m o d P ) a^{(p-1)}equiv=1(modP) a(p−1)≡=1(modP)
两边同除以a
a ( p − 1 ) ≡ = a − 1 ( m o d P ) a^{(p-1)}equiv=a^{-1}(modP) a(p−1)≡=a−1(modP)
所以
a − 1 ≡ = a ( p − 2 ) ( m o d P ) a^{-1}equiv=a^{(p-2)}(modP) a−1≡=a(p−2)(modP)

核心代码
int qmi(int a, int b, int p){
	int res = 1;
	if(a % p == 0){
		res = -1;
	}
    else{
		while (b-2){
        	if (b & 1) res = res * a % p;
        	a = a * a % p;
        	b >>= 1;
    	}
    }
    return res;
}
主要借鉴该文章

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968784.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号