• 同余方程笔记


    线性同余方程

    定义
     形同 (ax equiv b (mod m)),其中(x)是未知整数的同余式。
     
    定理
     (a,b in Z)(m in N^+)(gcd(a,m)=d),若(d|b),则方程恰好有(d)个模(m)不同余的解,否则方程无解。
     
    解法
     · 拓展欧几里得
     
     由同余方程的定义式可得 (ax+my=b),这个方程就是二元一次不定方程。若方程有解,则对于转化而来的方程 (ax+my=b),设 (d=gcd(a,m)),则 (a=d*a_0)(m=d*m_0)(b=d*b_0)
     
     方程转化为 (a_0x+m_0y=b_0),且 (gcd(a_0,m_0)=1),可以利用拓展欧几里得求出一可行解 (x)
     
     虽然 (x) 不唯一,但是属于一个模 (m) 剩余系,由定理可知,共有 (d) 个模 (m) 剩余类满足方程,由 (a_0x equiv b_0(mod m_0)),其分别为
     

    (x,x+m_0,x+2m_0... x+(d−1)m_0)

     
     其最小正整数解可表示为 ((x mod m + m) mod m)
     
     · 另一种神奇的方法
     对于方程 (a_0x equiv b_0(mod m_0)),由欧拉定理,(x equiv a_0^{phi(m_0) - 1}b_0(mod m_0))。最终所有的解可以表示为 (x equiv a_0^{phi(m_0) - 1}b_0 + km_0(mod m))
     


    线性同余方程组

    形式
     (left{ egin{array}{lcl} x equiv a_1 (mod n_1 )\ x equiv a_2 (mod n_2 )\ x equiv a_3 (mod n_3 )\   ....\ x equiv a_k (mod n_k ) end{array} ight.)
     
     给定(A = {a_1, a_2, a_3 ... a_k})(N = {n_1,n_2,n_3...n_k}),求一个(x)

    解法
    · 当 (forall{gcd(n_i,n_j) = 1})
     
     中国剩余定理。
     
     首先求出 (lcm(n_1,n_2,n_3...n_k)),即 (Pi_{i = 1}^k n_i),令 (m_1= frac{lcm}{n_1})(m_2= frac{lcm}{n_2})(m_3= frac{lcm}{n_3})(...)( m_k= frac{lcm}{n_k}),然后构造出一个方程组:
     
     (left{ egin{array}{lcl} t_1m_1 equiv 1 (mod n_1 )\ t_2m_2 equiv 1 (mod n_2 )\ t_3m_3 equiv 1 (mod n_3 )\   ....\ t_km_k equiv 1 (mod n_k ) end{array} ight.)
     
     利用拓展欧几里得可以求得 (t_1,t_2,t_3...t_k),最后
     

    (ans=(t_1m_1a_1 + t_2m_2a_2 + t_3m_3a_3 ... t_km_ka_k)mod lcm)

    · 当 (exists{gcd(n_i,n_j) e 1})
     
     拓展中国剩余定理。
     
     先考虑只有两个方程的情况:(left{ egin{array}{lcl} x equiv a_1 (mod n_1 )\ x equiv a_2 (mod n_2 ) end{array} ight.)
     
     得到 (left{ egin{array}{lcl} x = a_1 + t_1n_1\ x = a_2 + t_2n_2 end{array} ight.)
     
     可以合并为 (t_1n_1 + a_1 = t_2n_2 + a_2),因为 (t_1,t_2 in (-infty,infty)),所以项的符号并不对过程及解造成影响,变形得到一个可以用拓欧求解的二元一次不定方程 (t_1n_1 + t_2n_2 = a_2 - a_1)
     
     得到一个最小正整数解 (x_1),现在令 (k = (n_1x_1 + b_1)),构造一个方程 (x equiv k(mod lcm(a_1, a_2))),与下一个方程继续重复上述过程求解即可。
     
    · 另一种神奇的方法
     
     同样先仅考虑只有两个方程的情况,设 (y=x-a_1),则
     (left{ egin{array}{lcl} y equiv 0 (mod n_1)\ y equiv a_2-a_1 (mod n_2) end{array} ight.)
     
     (g=gcd(n_1,n_2)),若保证方程有解则 (g|(a_2-a_1)),设 (a_0=frac{a_2-a_1}{g})(y_0=frac{y}{g})(n_1 '=frac{n_1}{g})(n_2 '=frac{n_2}{g})
     (left{ egin{array}{lcl} y_0 equiv 0 (mod n_1 ')\ y_0 equiv a_0 (mod n_2 ') end{array} ight.)
     
     得(kn_1 ' equiv a_0( mod n_2 ')),由欧拉定理
     

    (k equiv n_1^{ 'phi(n_2 ')-1}a_0( mod n_2 '))

     
     现在将以上推算代回原方程:
     
    (y_0 equiv n_1^{ 'phi(n_2 ')}a_0 (mod n_1n_2))

     
    (x equiv gy_0 + a_1equiv g(n_1^{ 'phi(n_2 ')}a_0) + a_1 (mod n_1n_2))

     
     至此,两个同余方程合并成了一个同余方程。迭代若干次可得到原方程组的解。
     


    第一类指数同余方程

     
    形式
     形同 (a^x equiv b(mod p)) 的方程。

    解法
     · 当 (gcd(a,p) = 1)
     
     (Baby-step-Giant-step(BSGS))法。
     
     首先存在一个结论:若 (gcd(a,p)=1),则有 (a^{x mod phi(p)} equiv a^x (mod p))
     
     证明如下,因为 (gcd(a,p)=1),根据欧拉定理 (a^{phi(p)}equiv 1(mod p)),因此显然若 (k in N),那么 (a^{k phi(p)}equiv 1(mod p))
     
     设 (t in N)(t < phi (p)),所以 (a^{k phi(p) + t}equiv a^t(mod p)),故(a^{x mod phi(p)} equiv a^x (mod p))
     
     因此可以确定的是若方程有解,则在 ([0, phi(p))) 内一定有一个解。是的,这个结论在下面并没什么用。
     
     (BSGS)算法实际上是利用了分块思想来优化暴力枚举,有很多形式不同但本质相同的构造方程的方法,这里可以令 (m=lfloor sqrt{p} floor),设
     

    (x = im+j (i in [0,m], jin[0, m], i,jin N))

     
     即 (a^x=a^{im}a^j)
     
     设 (d = a^{im}),则原方程转化为 (da^j=b(mod p)),枚举(i),拓欧求得 (a^j)。预处理出 (a^i mod p(i in [0, m])),就可以利用哈希表近似 (O(1)) 查询 (j)
     
     · 当 (gcd(a,p) e 1)
     
     拓展(BSGS)
     
     (g=gcd(a,p)),原式为 ((a'g)^x equiv b'g(mod c'g)),即 (a'(a'g)^{x-1} equiv b'(mod c'))
     
     对 ((a'g)^{x-1}) 一项迭代求解,将每次产生的前面的 (a') 乘起来作为 (d),直到 (g=1) 为止,此时产生一个方程
     
    (da^{x-num} equiv b(mod c))

     
     令 (x=im+j+num),枚举求出 (a^i(i in [0,m+num])),即转化成与之前相同的问题。
     


    第二类指数同余方程

    形式
     形同 (x^k equiv b(mod p)) 的方程。

    解法
     · 当(p)是质数时
     
     表示成原根的若干次幂的形式后解线性方程。
     
     使 (a^y equiv x(mod p)) 且为 (p) 的一个原根,通过第一类指数同余方程的解法求得 (b equiv a^m(mod p)),则
     

    (a^{ky}equiv a^m(mod p)),得 (a^{ky-m} equiv 1(mod p))

     
     根据原根的性质,(ky-m equiv 0(mod (p-1))),解线性同余方程得到 (y)(x=a^ymod p)
     
     关于原根,即设 (p) 是质数,若 (a^0,a^1,a^2...a^{p-2}) 互不相等,则称(a)(p)的一个原根。
     
     若广义黎曼猜想成立,则 (p) 的最小正原根是 (O(log^6 p)) 级别的,通过枚举法可以快速找到原根。
     
     关于原根的判断与寻找,由于费马小定理成立,因此方程 (a^x equiv 1(mod p)) 的一个解是 (x = p − 1),所以它的最小整数解 (x_{min} |(p − 1))。此时若 (x_{min} =(p − 1)),则 (a)(p) 的原根。
     
     因此逐个尝试(p − 1)的约数即可。
     
     · 当(p)不是质数时
     
     设(p=p_1^{a_1}p_2^{a_2}p_3^{a_3}...p_k^{a_k}),则此类方程与方程组
     
    (x^k equiv b(mod p_i^{a_i}),i in [1,k]) 等价。

     
     还不太会。
     


    欢迎纠错 ……
  • 相关阅读:
    sqlserver 服务器主体 无法在当前安全上下文下访问数据库
    【转】ASP.NET"正在中止线程"错误原因
    【转载】好的用户界面-界面设计的一些技巧
    新浪博客“网络繁忙请稍后再试”
    Mac上好用的视频播放器有哪些?
    Mac上好用的视频播放器有哪些?
    游戏平台代表--PS4【推荐】
    游戏平台代表--PS4【推荐】
    ospf剩余笔记
    ospf剩余笔记
  • 原文地址:https://www.cnblogs.com/nanjoqin/p/10190172.html
Copyright © 2020-2023  润新知