zoukankan      html  css  js  c++  java
  • 高次同余方程

    高次同余方程,可分为两类。
    下面来分别介绍这两类方程和解法
    一类是

    [ a^x equiv b (mod p ) ]

    (a perp p)求一个非负整数解?
    首先因为(a perp p),我们由欧拉定理得

    [ a^{varphi(p)} equiv 1 (mod p) ]

    [ a^{0} equiv 1 (mod p) ]

    因此不难得出(0 - varphi(p))是个循坏节,我们可以暴力枚举,期望时间复杂度(O(varphi(p)))

    下面介绍BSGS算法(大步小步算法)
    (x=i*m-j,m=lceil sqrt p ceil),这样上式就变成

    [a^{i*m-j}equiv b (mod p) \ (a^m)^i equiv b *a^j ]

    我们可以由上面暴力算法可以知道(x<p),又因为(m=lceil sqrt{p} ceil),所以(i<sqrt m,0<j<sqrt{m})
    我们用-j来表示余数,可以方便把j移动到右边。(显然这一步是需要逆元,也就证明了为什么上面要求gcd(a,p)=1)

    然后我们枚举j,可以得到一些数对,((j,ba^j))插入哈希表或者map让j作为vaule,(ba^j)作为key。
    如果有重复的key,那就用新的更新旧的(希望j大)。

    再枚举i,如果在map或者哈希表中找到了一样的,那么就是找到了找到一对(i,j)(希望i小)
    这样得出的im-j就是最小的x。期望时间复杂度(O(sqrt{p}))
    模板

    本文来自博客园,作者:{2519},转载请注明原文链接:https://www.cnblogs.com/QQ2519/p/15112480.html

  • 相关阅读:
    js基础面试篇
    vue自定义指令
    vue兄弟节点通信
    vue----打包上线引用外部cdn
    vue----mockjs
    laravel database opearate1
    laravel seeding
    backtotop组件
    配置节流函数
    failed at the chromedriver@2.33.2 install script
  • 原文地址:https://www.cnblogs.com/QQ2519/p/15112480.html
Copyright © 2011-2022 走看看