一种分解奇合数的方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种分解奇合数的方法
摘要:本文基于求同余式2t≡2s(mod n ) 中的t 和s,提出一种寻找求出t和s的方法,已达到分解n的目的。

如果在n的一定范围内,已知t,根据t求出s,则n被分解。

关键词:完全平方数最大公约数范围t=
2kb
a+s=
2|
|kb
a-
本文中的n为奇数,并通过素数测试,不为素数,且不为平方数,不讨论偶数情况。

一、目前分解方法
我们知道目前Fermat 分解法、Dixon 分解法、二次筛法、多多项式二次筛法、数域筛法等都是基于求同余式为2t≡2s(mod n )所构成完全平方数t 和s,只要求出t 和s, 即通过g cd( t+ s, n) 和gcd( t- s, n) 达到分解n 的目的。

以上因数分解方法方法基于这样一个事实,
n=a×b(不一定是素数),设t=
2b
a+
,s=
2b
a-
得n= 2t−2s,即如果我们可以求出t和s,使得2t≡2s(mod n ). ,那么我们就有:
2
t−2s≡ (t − s)(t + s) ≡ 0 (mod n ),求出n的因子。

但如果n很大,很难快速找到一个平方数。

本文也是基于寻找t和s的关系来分解n的。

即根据t来求s。

二、t和s的范围
先确认一下n的二次平方剩余数的范围。

对于小于n的正整数,d、e ( 1≤d<e≤n-1) ,如d+e=n,求d的平方剩余
2
d≡ c (mod n) 则2e≡ c (mod n) (证明略)
我们可以把d的范围缩小为1≤d≤
21
-
n
当n>d时,d的二次剩余2d≡2d(mod n)
我们可以再次把d(即t和s的范围)的范围缩小为[n]+1≤d≤
21
-
n,
[n]为不大于n的最大整数,下同。

在确定的该范围内,我们来看看以下两个例子:
分析35 [35] = 5 ,[35]为不大于35的整数,
21
35-=17
即5+1≤d ≤17, d ∈[6 , 17],在这个范围内有如下二次剩余:
26≡ 1(mod 35) 27≡ 14(mod 35) 28≡ 29(mod 35) 29≡ 11(mod 35) 210≡ 30(mod 35) 211≡ 16(mod 35) 212≡ 4(mod 35) 213≡ 29(mod 35) 214≡ 21(mod 35) 215≡ 15(mod 35) 216≡ 11(mod 35) 217≡ 9(mod 35) 观察上述二次剩余,我们得到以下三种情况: 第一种情况:余数c 是完全平方数
26≡ 1(mod 35) 211≡ 16(mod 35) 212≡ 4(mod 35) 217≡ 9(mod 35) 第二种情况,d 中有35的因子 27≡ 14(mod 35) gcd( 7 , 35 ) =7
210≡ 30(mod 35) gcd( 10 , 35 ) = 5 214≡ 21(mod 35) gcd( 14 , 35 ) =7
215≡ 15(mod 35) gcd( 15 , 35 ) = 5
第三种情况:c 不是平方数,d 也没有公约数的,但根据余数c 可以找到一个配对数:
Ⅰ 28≡ 29(mod 35) 213≡ 29(mod 35)
213≡28 (mod 35) (13+8)(13-8)=21*5=105
gcd( 21 , 35 ) = 7 , gcd( 5 , 35 ) = 5 Ⅱ 29≡ 11(mod 35) 216≡ 11(mod 35)
216≡29 (mod 35) (16+9)(16-9)=25*7=175
gcd(25 , 35 ) = 5 , gcd( 7 , 35 ) = 7
分析 69 [69] = 8 ,[69]为不大于69的整数,
2
1
69-=34 即8+1≤d ≤39, d ∈[9 , 34],在这个范围内有如下二次剩余:
29≡ 12 (mod 69) 210≡ 31(mod 69) 211≡ 52(mod 69) 212≡6(mod 69) 213≡ 31(mod 69) 214≡ 58(mod 69) 215≡ 18(mod 69) 216≡ 49(mod 69) 217≡ 13(mod 69) 218≡ 48(mod 69) 219≡ 16(mod 69) 220≡ 55(mod 69) 221≡ 27(mod 69) 222≡ 1(mod 69) 223≡46 (mod 69) 224≡ 24(mod 69)
225≡ 4(mod 69) 226≡ 55(mod 69) 227≡39 (mod 69) 228≡ 25(mod 69) 229≡ 13(mod 69) 230≡ 3(mod 69) 231≡64(mod 69) 232≡58 (mod 69) 233≡ 54(mod 69) 234≡ 52(mod 69)
观察上述二次剩余,我们得到以下三种情况: 第一种情况:c 是完全平方数
216≡ 49(mod 69) 219≡ 16(mod 69) 222≡ 1(mod 69) 225≡ 4(mod 69) 228≡ 25(mod 69) 231≡64(mod 69) 第二种情况,d 中有69因子 29≡ 12 (mod 69) gcd( 9 , 69 ) =3
212≡6(mod 69) gcd( 12 , 69 ) = 3
215≡ 18(mod 69) gcd( 15 , 69 ) =3
218≡ 48(mod 69) gcd( 18 , 69 ) = 3
221≡ 27(mod 69) gcd( 21, 69 ) = 3
223≡46 (mod 69) gcd( 23, 69 ) = 23 224≡ 24(mod 69) gcd( 24, 69 ) = 3
227≡39 (mod 69) gcd( 27, 69 ) = 3 230≡ 3(mod 69) gcd( 30, 69 ) = 3 233≡ 54(mod 69) gcd( 33, 69 ) = 3
第三种情况:c 不是平方数,a 也没有公约数的,但余数c 可以找到一个配对数: Ⅰ 210≡ 31(mod 69) 213≡ 31(mod 69)
213≡210 (mod 69) (13+10)(13-10)=23*3=69
gcd( 23 , 69 ) = 23 , gcd( 3 , 69 ) = 3 Ⅱ 211≡ 52(mod 69) 234≡ 52(mod 69)
234≡211 (mod 69) (34+11)(34-11)=45*23=1035
gcd(45 , 69 ) = 3 , gcd( 23 , 69 ) = 23 Ⅲ 214≡ 58(mod 69) 232≡58 (mod 69)
232≡214 (mod 69) (32+14)(32-14)=46*18=828
gcd(46 , 69 ) = 23 , gcd( 18 , 69 ) = 3 Ⅳ 217≡ 13(mod 69) 229≡ 13(mod 69)
229≡217 (mod 69) (29+17)(29-17)=46*12=442
gcd(46 , 69 ) = 23 , gcd( 12 , 69 ) = 3
Ⅴ 220≡ 55(mod 69) 226≡ 55(mod 69)
226≡220 (mod 69) (26+20)(26-20)=46*6=276
gcd(46 , 69 ) = 23 , gcd( 6 , 69 ) = 3
三、分解的方法
根据以上例子,以下我们对该方法进行说明:
设 n=ab (a>b>0) , k t , k s ∈[ [n ]+1, 2
1
-n ] , [n ]为不大于n 的最大整数
k=2j+1(j ≥0),n 为奇数
我们构建k t =
2kb a + k s =2
|
|kb a -(因为kb 会大于a ,所以a-kb 取绝对值,避免负数),k t 〉k s (或者k t = 2ka b + k s =2
|
|ka b -)
则2k t -2k s =2)2(kb a + - 2
)2
||(kb a -= kab=kn …… ① ∴n|(2k t -2k s )
根据上式我们列出以下式子: j=1 1t = 2b a + 1s =2|
|b a - 21t ≡21s (mod n)
j=2 2t = 22b a + 2s =2
|2|b a - 22t ≡2
2s (mod n)
. . . j=i i t =
2ib a + i s =2
|
|ib a - 2i t ≡2i s (mod n) . . . j=k k t = 2kb a + k s =2
||kb a - 2k t ≡2k s (mod n)
我们以35来举例说明: 35=7×5, a=7 , b=5
1t =
257+=6 1s =2|
57|-=1 26≡ 1(mod 35) 2t =
2537⨯+=11 2s =2|
537|⨯-= 4 211≡24 (mod 35) 3t =
2557⨯+=16 3s =2|
557|⨯-= 9 216≡29≡11 (mod 35) , 29>35 4t =
2
5
77⨯+=21>17不再往下计算(因为21+14=35),如有兴趣可以往下计算。

a 、
b 换一下计算:
2t =
2735⨯+=13 2s =2|
735|⨯-= 8 213≡28 (mod 35) 3t =
2
7
55⨯+=20>17不再往下计算(因为20+15=35) 在第一种情况,12和17并不在t 和s 的计算范围内,但二次剩余是完全平方数,我们做一下分析:
212≡ 4(mod 35) (12+2)(12-2)=14*10=7*5*4
217≡ 9(mod 35) (17+3)(17-3)=20*14=7*5*8
即如果不包括在t 和s 计算中完全平方数的差应该为a*b*4*j (j ≥1)
(根据手工计算数据猜想的)。

比如 55=11*5,具有完全平方但不能根据t 和s 计算出来的二次剩余有: 216=26 216-26=(16-+6)(16-6)=11*5*4
221=21 221-21=(21+1)(21-1)=11*5*8 226=24 226-24=(26+4)(26-4)=11*5*12 相对于通过t 和s 计算出来为 a*b*k(k ≥1的奇数)
对于2i s <n 的情况我们可以直接得到完全平方数,为第一种情况。

我们知:2k t
>n ∵2)2
(
kb a + > kab ≥ab ,且2i s >n ,则必有2k t ≡2
k s (mod n),即在i t >i s 时,如果求出i t ,必有一个i s 与之对应。

(根据i s 不一定有i t 相对应)
根据上述,设2k t ≡ c (mod n),按以下情况分: 第一种情况: 如果c 为完全平方数
根据2k t -2
k s ,可以求出n 的因子
第二种情况: 如果k t 中有n 的因子,可以通过gcd(k t ,n)=m ,求出n 的因子,此时gcd(c ,n)=m (证明略)。

无对应的i t 和i s 。

第三种情况: 如果不是以上两种情况,对于2k t ≡ c (mod n),必然有一个2
k s ≡ c (mod n),与之对应,反之不一定,则2k t -2k s ,可以求出n 的因子。

在k t ∈[ [n ]+1,
2
1
-n ]这个范围内找一个数,已知k t 根据同余方程来求出k s (但要保证k t >k s ),就可以分解n 了。

我不清楚该种方法是否正确,我只是一个业余数学爱好者,同余方程也不会解,数论方面有很多东西不清楚,还希望大家批评指正。

该方法不适用于n=k p , ( k > 1 )的分解。

2014年3月15日夜完成于广东
附算法
如果求同余方程困难或者不会,可以通过以下循环查找(7至11步暴力寻找,但速度很慢)当然如果能求同余方程,速度会很快:
1t=(n-1)/2
22t≡ c mod n
3k=gcd(c , n )
4if k>1 exit
5if c=平方数exit
6m =(2t-c)/n
7i = 1
8i<m
9s = n*i+c
10if s=平方数吗exit
11i-i+1 转8。

相关文档
最新文档