首页
社区
课程
招聘
[原创]整数分解随笔(九)
发表于: 2021-1-2 11:28 31741

[原创]整数分解随笔(九)

2021-1-2 11:28
31741

   本次文中,分为两部分,第一部分介绍a^2≡b(mod n)中b-a差值所得到二次剩余值的计算,第二部分是对a≡1/2的拓展,对于a≡1/2,在之前的介绍中得到是与二次剩余值k或者n-k的差值为连续整数,如果当a≡s/j(mod n)时 ( j≥2, s≥1, j>s (s,j)=1) ,推出一般式,便于得到与该二次剩余值的关系计算方法,为了能更清晰的表达,文中有不少的举例,所以本次文也比较长,如果文中有不妥之处,欢迎批评指正,也欢迎大家相互交流。

一、a^2≡b(mod n)差值的计算
    a^2≡b(mod n) => a^2≡ ∓ia+b±ia(mod n)  , i≥0 ...①
    对于该式有如下计算方法:
    a^2≡ ∓ia+b±ia(mod n) => a^2±ia≡b±ia(mod n) 两边同时乘以4并加 i^2
    4a^2±4ia+i^2≡4(b±ia)+i^2 (mod n) => (2a±i)^2≡i^2+4(b±ia) (mod n)
    而i^2+4(b±ia)正好为一元二方程的平方根
    如果 i=2j (j≥1) , ①式可以按以下方法进行变化:
    a^2±ia≡b±ia(mod n) => a^2±2ja≡b±2ja(mod n) ,两边同时加 j^2 得:
    a^2±2ja+j^2≡j^2+b±2ja(mod n) =>(a±j)^2≡ j^2+b±2ja(mod n)
    即相邻二次剩余值可以通过b值进行计算。
1、a^2≡b(mod n)相邻值计算
    a^2≡b(mod n)  => a^2≡ ia+b-ia(mod n)  , i≥0,即根据b-ia的差值可以计算出小于a值的平方剩余
   当i为偶数,即i=2j,可以计算相邻值。
        把i=2j 代入上式,得 a^2≡2ja+b-2ja (mod n)  =>
                                                 a^2-2ja≡b-2ja (mod n)  =>(两边同时加 j^2)
                                                a^2-2ja+j^2≡(b-2ja)+j^2 (mod n)  =>
                                                (a-j)^2 ≡ j^2+(b-2ja)   (mod n)
    a^2≡b(mod n)  => a^2≡ -ia+b+ia(mod n)  , i≥0  (a+j)^2≡j^2+(b+2ja)   (mod n)  ( i=2j )
    例 n=299
         32^2 ≡ 127 (mod 299)  => 32^2≡ 63+2*32 (mod 299) 得 31^2≡63+1^2=64(mod 299)
           32^2≡-1+4*32(mod 299)  得  30^2≡ -1+2^2=3(mod 299)
           32^2≡191-2*32(mod 299)  =>  33^2≡ 192( mod 299)
2、a^2≡b(mod n)对称值计算
   上式中i为偶数,如果i为奇数,即i=2j+1(j≥0),可以计算对称值(只计算n=4k-1,n=4k+1也可以同样得到)
      根据a^2≡b(mod n)对称值(b-a)的计算得,(2k-(a-(2j+1-1)/2))^2≡k+j(j+1)+b-(2j+1)a (mod n)
      例 n=299
      32^2≡127 (mod 299) =>32^2≡1*32+127-1*32(mod 299)  对称值为
                  (150-32)^2≡75+127-32 => 118^2≡170(mod 299)
      32^2≡127 (mod 299) =>32^2≡3*32+127-3*32(mod 299)  对称值为
                  (150-(32-(3-1)/2))^2≡75+1*2+127-3*32=>119^2≡108(mod 299)
      32^2≡127 (mod 299) =>32^2≡5*32+127-5*32(mod 299)  对称值为
                  (150-(32-(5-1)/2))^2≡75+2*3+127-5*32=>120^2≡48(mod 299)
      ......
      根据a^2≡b(mod n)对称值(b+a)的计算得,(2k-(a+(2j+1+1)/2))^2≡k+j(j+1)+b+(2j+1)a (mod n)
      例 n=299
      32^2≡127 (mod 299) =>32^2≡-1*32+127+1*32(mod 299)  对称值为
                  (150-(32+1))^2≡75+127+32 => 117^2≡234(mod 299)
      32^2≡127 (mod 299) =>32^2≡-3*32+127-3*32(mod 299)  对称值为
                  (150-(32+(3+1)/2))^2≡75+1*2+127+3*32=>116^2≡1(mod 299)
      32^2≡127 (mod 299) =>32^2≡-5*32+127-5*32(mod 299)  对称值为
                  (150-(32+(5+1)/2))^2≡75+2*3+127+5*32=>115^2≡69(mod 299)
      ......

3、a^2≡b(mod n)乘以2的计算
     a^2≡ ia+b-ia(mod n) (i≥0) => a^2-ia-(b-ia)≡0 (mod n)
     该式为一元二次方程,根据通解中的根号得到: i^2+4(b-ia)=i^2-4ia+4b≡4a^2-4ia+i^2=(2a-i)^2
     即:  i^2+4(b-ia)≡(2a-i)^2 (mod n)
     例 n=299
     32^2 ≡ 127 (mod 299) => 32^2≡1*32+95 (mod 299) => (2*32-1)^2≡1^2+4*95(mod 299) => 63^2≡82(mod 299)
     32^2 ≡ 127 (mod 299) => 32^2≡2*32+63 (mod 299) => (2*32-2)^2≡2^2+4*63(mod 299) => 62^2≡256(mod 299)
     32^2 ≡ 127 (mod 299) => 32^2≡3*32+31 (mod 299) => (2*32-3)^2≡3^2+4*31(mod 299) => 61^2≡133(mod 299)
     ...
     同样 a^2≡ -ia+b+ia(mod n) (i≥0) => a^2+ia-(b+ia)≡0 (mod n) 得到:
     (2a+i)^2≡i^2+4(b+ia) (mod n)
     32^2 ≡ 127 (mod 299) => 32^2≡-1*32+159 (mod 299) => (2*32+1)^2≡1^2+4*159(mod 299) => 65^2≡39(mod 299)
     32^2 ≡ 127 (mod 299) => 32^2≡-2*32+191 (mod 299) => (2*32+2)^2≡2^2+4*191(mod 299) => 66^2≡170(mod 299)
     32^2 ≡ 127 (mod 299) => 32^2≡-3*32+223 (mod 299) => (2*32+3)^2≡3^2+4*223(mod 299) => 67^2≡4(mod 299)
     ...

4、设c^2≡d(mod n),该平方剩余值是否在a^2≡b(mod n)范围的判断
     1}、a<k的判断,按完全平方判断
         c>a: 上式两式相减的,c^2-a^2≡d-b(mod n)  => c^2≡a^2+d-b(mod n)
             例 n=299  
                32^2 ≡ 127 (mod 299)  判断 259是否在32的右边,即大于32,根据上式得
                   32^2+259-127=1024+132=1156=34^2  
         c<a: 上式两式相减的,a^2-c^2≡b-d(mod n)  => c^2≡a^2-(b-d)(mod n)
             例 n=299  
                32^2 ≡ 127 (mod 299)  判断 3是否在32的左边,即小于32,根据上式得
                   32^2-(127-3)=1024-124=900=30^2
     2}、a>k的判断,按连续整数积判断
         c<a:  a(a-1)+d-b≡j(j+1)(mod n)
             例  n=299
                133^2≡48(mod 299) 判断118是否位于133的左边: 150-133=17
                  17(17-1)+118-48=272+70=342=18*19  所以 (150-19)^2≡118(mod 299) => 131^2≡118(mod 299)
           c>a:  a(a-1)-(b-d)≡j(j+1)(mod n)
             例  n=299
                133^2≡48(mod 299) 判断285是否位于133的右边: 150-133=17 因285>48 所以 285≡-14(mod 299)
                  17(17-1)-(48+14)=272-62=210=14*15  所以 (150-15)^2≡285(mod 299) => 135^2≡285(mod 299)
    3)、a=k的判断
        当a=k时,存在值得多次跳跃(即加一次n,则为跳跃一次),对这种情况有如下公式的的计算
        c<k:k^2≡k/4(mod n) (n=4k-1型,对于n=4k+1型,这里不给出)  (k-2i)^2≡k/4+(2i)^2-i (mod n) (i>0)
              (k-(2i-1))^2≡k/4+2k+(2i-1)^2-i (mod n) (i>0)
              例 n=299=4*75-1
                  75^2≡243(mod 299)    (75-4)^2≡243+4^2-4/2 => 71^2≡257(mod 299)
                                                        (75-5)^2≡243+150+5^2-3 => 70^2≡116(mod 299)
        c>k:k^2≡k/4(mod n) (n=4k-1型)  (k+2i)^2≡k/4+(2i)^2+i (mod n)
              (k+(2i-1))^2≡k/4+2k+(2i-1)^2+i-1 (mod n) (i>0)
              例 n=299=4*75-1
                  75^2≡243(mod 299)    (75+4)^2≡243+4^2+4/2 => 79^2≡261(mod 299)
                                                        (75+5)^2≡243+150+5^2+3-1 => 80^2≡121(mod 299)



二、乘法逆元的计算方法
      在前面文中,有对a≡1/2(mod n)计算方法,平方剩余值c^2≡d(mod n),与k或者n-k的差,即d-k或者d-(n-k)为连续整数积时,在后序序列中,找到费马分解的另一个值,整数被分解,当a≡i/j (mod n) (j>2,i≥1),即c^2≡d(mod n)时,c^2≡d(mod n),如何计算d与b的差值。
      设a^2≡b (mod n),按以下两种方式计算二次剩余:
        ⑴  a的乘法逆为偶数时,即 a≡m/(2j)(mod n) ( j≥1 , m为整数,共j个值,取值见后续说明) ,按a±ij计算二次剩余,其中i≥1,得:
             (a±i*j)^2≡d(mod n)                    =>
             a^2±2a*i*j+(i*j)^2≡d(mod n)    =>
             d-b≡(i*j)^2±a*(2j)*i(mod n)
             ∵ a*(2j)≡m(mod n)  ∴上式可得:
              d-b≡(i*j)^2±m*i (mod n)       ②
        ⑵ a的乘法逆为奇数时,即 a≡m/(2j+1)(mod n) ( j≥1 , m为整数,共2j+1个值,取值见后续说明) ,按a±i(2j+1)计算二次剩余,其中i≥1,得:
             (a±i*(2j+1))^2≡d  (mod n)                             =>
             a^2±2a*i*(2j+1)+(i*(2j+1))^2≡d (mod n)      =>
             d-b≡(i*(2j+1))^2±2*a*(2j+1)*i (mod n)
             ∵ a*(2j+1)≡m (mod n)  ∴上式可得:
              d-b≡(i*(2j+1))^2±2*m*i (mod n)    ③

    1、先看公式②,即逆元为偶数情况 a≡m/2j (mod n)及m值得变化
         m值与j相关,共有j个值:
            当j为偶数时,1/2j -j/2, 1/2j -j/2+1 , ... 1/2j -2, 1/2j -1, 1/2j, 1+1/2j,  2+1/2j, ... j/2-1+1/2j
            当j为奇数时,1/2j -(j-1)/2, 1/2j -(j-1)/2+1, ... 1/2j -2, 1/2j -1, 1/2j, 1+1/2j, 2+1/2j, ... (j-1)/2-1+1/2j, (j-1)/2+1/2j
            后续举例进行m的说明。
      ⑴  j=1,此时m只有一个值 m=1,a≡1/2 (mod n) ,
           根据 ② 计算公式,在i=1,2,3,4.....,值为:
            i=1:   d-b≡1^2±1=1(1±0) (mod n)                     
            i=2:   d-b≡2^2±2=2(2±1) (mod n)
            i=3:   d-b≡3^23=3(3±1) (mod n)
            .
            .
            .
            即为连续的两个整数积,为逆序值,逆序序列为 ① 的一个特殊情况
      ⑵  j=2,此时m有两个值 m=1及m=-3,可以计算出a≡1/4周边的二次剩余值:
           先看m=1, a≡1/4 (mod n)
           根据 ② 计算公式,在i=1,2,3,4.....,值为:
            i=1:   d-b≡2^2±1 (mod n)                     
            i=2:   d-b≡4^2±2 (mod n)
            i=3:   d-b≡6^2±3 (mod n)
            .
            .
            .
            m=-3 ,a≡-3/4 (mod n) ,即a左边的一个值,可按这样计算 :1/4-1=-3/4
            根据 ② 计算公式,在i=1,2,3,4.....,值为:
            i=1:   d-b≡2^2±(-m)*1=2^2±(-3)*1 (mod n)                     
            i=2:   d-b≡4^2±(-m)*2=4^2±(-3)*2 (mod n)
            i=3:   d-b≡6^2±(-m)*3=6^2±(-3)*3 (mod n)
            .
            .
            .
          例:n=299  
              a≡1/4 (mod 299) ≡75 (mod 299)  75^2≡243 (mod 299)
             (75-2*1)^2=73^2≡246 (mod 299)      (75+2*1)^2=77^2≡248 (mod 299)
             i=1: 246-243=3=2^2-1                     248-243=5=2^2+1
             (75-2*2)^2=71^2≡257 (mod 299)      (75+2*2)^2=79^2≡261 (mod 299)
             i=2: 257-243=14=4^2-2                     261-243=18=4^2+2
             (75-2*3)^2=69^2≡276 (mod 299)      (75+2*3)^2=81^2≡282 (mod 299)
             i=3: 276-243=33=6^2-3                     282-243=39=6^2+3
             .
             .
             对a≡1/4 (mod 299)只计算了一半的二次剩余值,现在再来计算另一半的二次剩余值,即为 a≡1/4-1=-3/4 (mod 299):
             (1/4-1)^2=(-3/4)^2 或者(75-1)^2=74^2≡94 (mod 299),以94为基准计算二次剩余:
             (74-2*1)^2=72^2≡101 (mod 299)      (74+2*1)^2=76^2≡95 (mod 299)
             i=1: 101-94=7=2^2-(-3)*1                     95-94=1=2^2+(-3)*1
             (74-2*2)^2=70^2≡116 (mod 299)      (74+2*2)^2=78^2≡104 (mod 299)
             i=2: 116-94=24=4^2-(-3)*2                     104-94=10=4^2+(-3)*2
             (74-3*3)^2=68^2≡139 (mod 299)      (74+2*3)^2=80^2≡121 (mod 299)
             i=3: 139-94=45=6^2-(-3)*3                     121-94=27=6^2+(-3)*3
             .
             .
            比如,要判断256是否在1/4的周围,以(1/4)^2≡ 243 (mod 299) 和 (1-1/4)^2≡ 94 (mod 299)两个二次剩余值为基准值进行计算,可以按以下公式进行判断(把i换成x):
            (2x)^2-x=256-243  => (2x)^2-x-13=0   根据一元二次通解:B^2-4AC=1+4*4*13=209  虽然209为二次剩余值(见下面的证明),但不太好找对应的平方数。
             【 该段为B^2-4AC为二次剩余值得证明:
                设c^2≡d (mod n),根据公式 ② 得:
                      d-b≡(jx)^2±mx (mod n)  => (jx)^2±mx-(d-b)≡ 0 (mod n)
                     一元二次通解得: m^2-4*j^2*(-(d-b))=m^2+(2j)^2*(d-b)≡m^2+(2j*c)^2-(2j*a)^2
                    因为  a≡m/(2j)(mod n),所以上式为  m^2+(2j*c)^2-m^2=(2j*c)^2,该值必为二次剩余,上式得证。】


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 4
支持
分享
最新回复 (4)
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
年更系列,感谢分享
2021-1-2 12:29
0
雪    币: 1131
活跃值: (4202)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
3
在未完成分解之前,一切都是异想天开
2021-1-4 07:10
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
小菜鸟一 在未完成分解之前,一切都是异想天开
回到二十年前,现在的很多东西都是异想天开
2021-1-4 08:28
0
雪    币: 250
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
复杂的东西一定是错的
2022-1-8 21:51
0
游客
登录 | 注册 方可回帖
返回
//