zoukankan      html  css  js  c++  java
  • 初等数论初步——一次同余方程

    一、一次同余式的概念

    通常,我们把含有未知数的同余式叫做同余式方程

    一类形式最简单的同余方程是一次同余方程,一般形式为ax≡b(mod n),其中n为正整数,a,b为整数且a不为0.

    二、一次同余方程的解的情况

    1、是否有解

    2、有多少解

    3、有解的情况下如何描述解

    1º 先讨论特殊情况,即(a,n) = 1的情形

    (a,n) = 1 <==> 存在整数k,l,是的ak + nl = 1 <==> n | nl = 1 - ak <==> ak≡1(mod n)

    因此,ax≡b(mod n) <==> ax≡b(ak) = a(bk)(mod n) <==> x≡kb(mod n)

    因此,这个同余方程有且只有一个解x≡kb(mod n)

    2º 再讨论(a,n)  = d> 1的情形

    若同余方程有解,不妨设x≡c(mod n),则ac≡b(mod n),从而n | ac - b

    (a,n)  = d <==> d | a,d | n <==> d | ac,又有n | ac - b <==>d | ac - b

    从而d | ac - (ac - b) = 1,这表明上述的同余方程有解时,必有d | b.

    那么当d | b时,同余方程是否一定有解呢?

    记a = a’d,b= b’d,n = n’d,则(a’,n’)=1,注意到

      ax≡b(mod n) <==> n | ax - b <==> n’d | (a’x - b’)d <==> n’ | (a’x - b’),于是同余方程可以化简为a’x≡b’(mod n) (*)

    根据情况一,(a’,n’) = 1,同余方程(*)有唯一解x≡k’b’(mod n’)

    此时x = k’b’ +  n’l,l为任意整数对l,d用带余除法:l = dq + r,0≤r≤d-1,q为整数,于是

    x = k’b’ +  n’l = k’b’ +  n’(dq + r) = k’b’ + nq + n’r,所以x≡k’b’ + n’r(mod n),r = 0,1,...,d-1

    于是得出结论:

    三、求解一种特殊的一次同余方程:大衍求一术

    大衍求一术是求解同余方程ax≡1(mod n),其中a为正整数,a<n且(a,n)= 1的一种算法程序。

    (1)算法步骤:

    先规定k1=1,r1=a

    对n、k用带余除法:  n = r1q2+r2,记k2=-q2k1;

    对a、r2用带余除法:a = r2q3+r3,记k3=k1-q3k2

    对r2、r3用带余除法:r2 = r3q4+r4,记k4=k2-q4k3

     对r3、r4用带余除法:r3 = r4q5+r5,记k5=k3-q5k4

    ......

    重复这种计算,知道余数rn=1,那么最后所得kn=kn-2 - qnkn-1满足akn≡1(mod n)

    于是x≡kn(mod n)就是一次同余方程ax≡1(mod n)的解

    (2)算法原理

    r1=a = ak1(mod n)

    r2=n - r1q2≡a(- q2k1) = ak2(mod n)

    r3=r1 - r2q3≡a(k1 - q3k2) = ak3(mod n)

     r4=r2 - r3q4≡a(k2 - q4k3) = ak4(mod n)

    ......

    而r1 = 1,故ak≡ 1(mod n),这就是大衍求一术的原理了

  • 相关阅读:
    js开发笔记
    安全相关开发笔记
    常用.NET库使用总结
    Windows使用总结
    .NET Web开发笔记
    Unity插件使用总结
    WinForm开发笔记
    C#开发笔记
    iTunes使用总结
    Mac使用总结
  • 原文地址:https://www.cnblogs.com/lfri/p/9498268.html
Copyright © 2011-2022 走看看