• 数论:关于逆元


    数论:关于逆元

    之前写过一篇逆元的文章,但是由于我掌握不牢,所以现在连不定方程都不会解,在此进行补充升华(buyiding)

    这就是逆元的简易求法

    若ax+by=1.

    那么x就是a对模b的逆元,同理,y就是b对模a的逆元.

    这时,就要用到Exgcd来快速求出逆元.

    在此之前,逆元存在的前提是a,b互质.(如果不互质,那么等号右边就换成gcd(a,b)).

    这时通过欧几里得算法,a=gcd(a,b)=1时,等式化为x=1.

    也就是说1对模0的逆元是1.

    我们知道a,b化为1,0时,是辗转相除的到的,那么对于任意一对a,b,满足a=bm+n.

    b对模a的逆元可以分解为b对模(mb+n)的逆元.转化为yb%(mb+n)=1.

    不难看出,对于mb+n的mb项,yb%mb永远不可能出现1.那么1只能通过%n得到.这时候就是b模n的逆元x0的作用.

    设x0,使x0b%n=1.又因为a=mb+n,所以不光是n,y(b模a的逆元)里面还要考虑mb的问题,而mb是b的倍数,每个n会和m个b同时出现,n的数量成了解决问题的关键.(一开始,可能会想到x0b/n,但是写出公式后发现这样会出现0循环(因为x0可能为0))

    引出n对模b的逆元y0.

    y0n%b=1.但是我是用y个b取模(mb+n),n的数量要求n(x0b/n)(向下取整)=x0b-1,这时,就要去n和某个数的乘积%b=-1(也就是b-1).

    又因为-y0n%b=b-1.

    所以这里n的数量就是-y0

    刚刚说到一个a有一个n,所以这也是a的数量,y0a里面一共有y0m个b.

    加上一开始求的x0b%n=1.

    总结一下,x0b%n=1.-y0mb%mb=0.

    b对模a的逆元(y)也就是b对模n的逆元(x0)减去n对模b的逆元(b0)乘a与b的商(m)

    那么怎么求出a对模b的逆元呢?

    根据逆元的定义,y0n%b=1.

    如此,y0a%b=y0mb%b+y0n%b=0+1=1.

    a对模b的逆元(x)也就是n对模b的逆元(y0).

    [inom {x=y_0}{y=x_0-y_0*frac{a}{b}(向下取整)} ]

    这样就能写出递归式,从两个互质的数举例:(107,37).

    (107,37)->(37,33)->(33,4)->(4,1)->(1,0)->[1,1]->[1,-3]->[-3,25]->[25,-28]->[-28,81]

    所以通过这种方法,就可以求出一对互质数的逆元.

  • 相关阅读:
    3D打印技术大潮
    有用网址
    linux下scp命令详解
    使用 GDB 调试多进程程序
    linux下top命令参数解释
    Sql动态查询拼接字符串的优化
    vmstat参数详解
    freebsd破解密码
    freebsd防火墙
    freebsd无法输入汉字
  • 原文地址:https://www.cnblogs.com/Wild-Donkey/p/12366417.html
Copyright © 2020-2023  润新知