乘法逆元的具体求法
发布日期:2021-07-14 01:03:49 浏览次数:50 分类:技术文章

本文共 1394 字,大约阅读时间需要 4 分钟。

费马小定理求逆元

  • 费马小定理:a是不能被质数p整除的正整数,则有 a^(p-1) ≡ 1 (mod p)
    求a关于p的乘法逆元,即为a*c≡ 1 (mod p),那么a^(p-2)就是a的逆元
  • Code
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    LL quickpow(LL x,LL n,LL Mod){
    LL ans=1; x%=Mod; while(n>0){
    if(n&1) ans=(ans*x)%Mod; //n%2==1 x=(x*x)%Mod; n/=2; } return ans; } LL getInv(LL a,LL mod){
    return quickpow(a,mod-2,mod); } //时间复杂度O(logMod),且当Mod为不能整除a的素数时可用,一般题目给出1e9+7; //当Mod-2过大的时候可以使用欧拉降幂防T,a^(Mod-2)%Mod=a^((Mod-2)%phi(Mod)+phi(Mod)) %Mod;

扩欧求逆元

  • 给定模数m,求a的逆相当于求解ax=1(mod m)
    这个方程可以转化为ax-my=1
    然后套用求二元一次方程的方法,用扩展欧几里得算法求得一组x0,y0和gcd
    检查gcd是否为1
    gcd不为1则说明逆元不存在
    若为1,则调整x0到0~m-1的范围中即可
  • Code
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
    LL exgcd(LL a,LL b,LL &x,LL &y)//扩展欧几里得算法 {
    if(b==0){
    x=1,y=0; return a; } LL ret=exgcd(b,a%b,y,x); y-=a/b*x; return ret; } LL getInv(int a,int mod)//求a在mod下的逆元,不存在逆元返回-1 {
    LL x,y; LL d=exgcd(a,mod,x,y); return d==1?(x%mod+mod)%mod:-1; } //时间复杂度为O(logn),只要存在逆元均可求

线性推逆元

  • 求1,2,…,N关于mod的逆元(mod为质数)
  • Code
    1 2 3 4 5 6 7
    const int mod = 1000000009; const int maxn = 10005; int inv[maxn]; inv[1] = 1; for(int i = 2; i < 10000; i++)     inv[i] = inv[mod % i] * (mod - mod / i) % mod; //时间复杂度O(N),求1到N所有数的逆元

递归求逆元

  • Code
    1 2 3 4 5 6
    LL inv(LL i) {
    if(i==1)return 1; return (mod-mod/i)*inv(mod%i)%mod; } //O(logmod),mod是素数

转载地址:https://blog.csdn.net/cpongo3/article/details/89334336 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:不要62
下一篇:Intervals

发表评论

最新留言

很好
[***.229.124.182]2024年04月12日 03时24分11秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【沃顿商学院学习笔记】公益创业——09最具替代竞争力的分析Most Competitive Alternative (MCA) Analysis 2019-04-27
【沃顿商学院学习笔记】公益创业——10测试概念合理性Test of Concept Plausibility 2019-04-27
【沃顿商学院学习笔记】公益创业——11干系人分析Stakeholder Analysis(完) 2019-04-27
【沃顿商学院学习笔记】商业基础——Financing:01 时间的价值Time Value of Money 2019-04-27
【沃顿商学院学习笔记】商业基础——Financing:02 年金 Annuity 2019-04-27
【沃顿商学院学习笔记】商业基础——Financing:03 税收 Taxes 2019-04-27
【沃顿商学院学习笔记】领导力——Leadership:01目标驱动领导力 Purpose-Driven Leadership 2019-04-27
【沃顿商学院学习笔记】领导力——Leadership:02变化中的商业角色 The Role of Business is Changing 2019-04-27
【沃顿商学院学习笔记】领导力——Leadership:03培养你的目标 Cultivate Your Purpose 2019-04-27
【沃顿商学院学习笔记】领导力——Leadership:04测试你的设想 Test Your Assumption 2019-04-27
【沃顿商学院学习笔记】领导力——Leadership:05寻求双赢 Funding the Win-Win 2019-04-27
【沃顿商学院学习笔记】领导力——Leadership:06把目标落地在公司 Bring it at Home 2019-04-27
对象池——利弊与使用场景 2019-04-27
RedisCluster-Pipeline操作,提升10倍以上响应速度 2019-04-27
(DDD)领域驱动设计——认识领域驱动 2019-04-27
莫言系统腐化——“一坨”真的好吗? 2019-04-27
复杂性应对之道 - 领域建模 2019-04-27
RST及java socket关闭后读写的各种异常 2019-04-27
架构设计的深入思考与总结——概述 2019-04-27
给JDK提的bug单—某系统大量CLOSE_WAIT异常 2019-04-27