本發(fā)明涉及一種數(shù)的分解方法。
背景技術(shù):
大整數(shù),理論上即使采用世界上最快的計(jì)算機(jī)進(jìn)行分解,也需要以年為單位的時(shí)間,因此,大整數(shù)廣泛地應(yīng)用到加密領(lǐng)域中,而獲得一個(gè)大整數(shù)的全部分解因數(shù)則是建立密鑰的關(guān)鍵。而現(xiàn)今,大整數(shù)的分解至今是一個(gè)世界難題。人類一直在不停地尋找有效解決該問題的方法,但至今尚無明顯成效。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的發(fā)明目的在于提供一種能加快大奇數(shù)分解的方法。
本發(fā)明是這樣實(shí)現(xiàn)的,首先,先將大整數(shù)分解成大奇數(shù)m,如果大整數(shù)是大奇數(shù)m,則直接進(jìn)入大奇數(shù)m的分解.大奇數(shù)m的分解是這樣實(shí)現(xiàn)的,先確定大奇數(shù)m在二叉樹T中的位置,二叉樹T是從最頂端的結(jié)點(diǎn)3開始,依據(jù)奇數(shù)由小到大,由上到下,由左到右分布在二叉樹T上,即3為二叉樹T最頂?shù)慕Y(jié)點(diǎn),亦即根結(jié)點(diǎn),3往下分成二叉,左叉是5,右叉是7;5和7分別向下分成二叉,5和7成為向下分成二叉的子根結(jié)點(diǎn),5的左叉是9,右叉是11,7的左叉是13,右叉是15,這樣一直分叉下去,從而形成二叉樹T。二叉樹T從最頂?shù)?開始,從上往下形成多層結(jié)點(diǎn)層L,0≤L;每層有2L個(gè)奇數(shù)(如0層是20=1,1層是21=2, 2層是22=4….),第L層的第P個(gè)數(shù)的大小是:2×2L+1+2×(P-1),1≤P ≤2L,大奇數(shù)m在二叉樹T中的層數(shù)是K=-1,然后,用二叉樹T中取整的K/2層及其以上層數(shù)中的奇數(shù)除大奇數(shù)m,若不能除盡,則該大奇數(shù)是素?cái)?shù);若有一個(gè)數(shù)能除盡,則該奇數(shù)是大奇數(shù)m的一個(gè)因數(shù),相除運(yùn)算采用多臺(tái)計(jì)算機(jī)或計(jì)算單元同時(shí)進(jìn)行,即將二叉樹T中K/2層及其以上層數(shù)中的奇數(shù)劃分成數(shù)個(gè)子二叉樹Tn,具體是:先確定子二叉樹Tn的層高h(yuǎn)0,0≤h0,依據(jù)層高h(yuǎn)0將二叉樹T之K/2層及其以上層的全部奇數(shù)分成數(shù)層子二叉樹樹組;每層子二叉樹樹組由D個(gè)子二叉樹Tn組成,D=2(S×(h0+1)),0≤S;下層每個(gè)子二叉樹樹組最頂端的結(jié)點(diǎn)是上層子二叉樹樹組中子二叉樹底層結(jié)點(diǎn)的其中結(jié)點(diǎn),然后,將數(shù)個(gè)子二叉樹Tn有機(jī)地分配(如平均分配)給數(shù)臺(tái)計(jì)算機(jī)或計(jì)算單元同時(shí)進(jìn)行大奇數(shù)m與子二叉樹Tn中的奇數(shù)進(jìn)行相除,以獲得大奇數(shù)m的因數(shù),每個(gè)子二叉樹由一臺(tái)計(jì)算機(jī)或計(jì)算單元負(fù)責(zé)計(jì)算。
由于大奇數(shù)的因數(shù)一定是奇數(shù),而且,由于大于大奇數(shù)m必含有二叉樹T中K/2層及其以上層的因數(shù),因此大奇數(shù)m與二叉樹T中K/2及其以上層數(shù)中的奇數(shù)相除,必能獲得該大奇數(shù)m的因數(shù)。理論依據(jù)如下:
二叉樹T中每個(gè)節(jié)點(diǎn)的奇數(shù)A,該節(jié)點(diǎn)奇數(shù)A的左叉奇數(shù)是2×A-1,右叉奇數(shù)是2×A-1,如3的左叉奇數(shù)是2×3-1=5,右叉奇數(shù)是2×3-1=7,那么L層中左邊第一個(gè)奇數(shù)的數(shù)值是:
2×……(2×(2×(2×3-1)-1)-1)……-1=2×2L+1, 0≤L,
L層中右邊第一個(gè)奇數(shù)的數(shù)值是:
2×……(2×(2×(2×3+1)+1)+1)……+1=4×2L-1, 0≤L,
L/2層中右邊第一個(gè)奇數(shù)的數(shù)值是:
4×2L/2-1, 0≤L,
L/2+1層中左邊第一個(gè)奇數(shù)的數(shù)值是:
2×2(L/2+1)+1, 0≤L,
(4×2L/2-1)×(2×2(L/2+1)+1)=8×2(L+1)-1>4×2L-1,
即使考慮L/2不是整數(shù)而取整的情況下,
(4×2[L/2]-1)×(2×2([L/2]+1)+1)=8×2L-1>4×2L-1,
由于大奇數(shù)的因數(shù)一定是奇數(shù),因此,大奇數(shù)m與二叉樹T中K/2層及其以上層數(shù)中的奇數(shù)相除,就能獲得該大奇數(shù)m的所有因數(shù)。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果為:
(1)由于利用二叉樹的特性,有效地縮少了大奇數(shù)因子的搜索范圍,從而有效地提升了大整數(shù)分解的速度。
(2)將二叉樹分解成數(shù)個(gè)子二叉樹并使用多臺(tái)計(jì)算機(jī)或計(jì)算單元同時(shí)并行計(jì)算,有利于資源的有效分配并充分利用計(jì)算機(jī)資源,從而極大地加快了大整數(shù)分解的速度。
(3)采用二叉樹的方法,能夠揭示奇數(shù)的許多以前未能發(fā)現(xiàn)的性質(zhì)如對(duì)稱性等。利用此類性質(zhì)設(shè)計(jì)算法,可減少大量的運(yùn)算量。
附圖說明
圖1為二叉樹的結(jié)構(gòu)示意圖;
圖2為二叉樹分解為子二叉樹的結(jié)構(gòu)示意圖。
具體實(shí)施方式:
現(xiàn)結(jié)合附圖和實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)描述:
本發(fā)明是這樣實(shí)現(xiàn)的,首先,先將大整數(shù)分解成大奇數(shù)m,如果大整數(shù)是大奇數(shù)m,則直接進(jìn)入大奇數(shù)m的分解,大奇數(shù)m的分解是這樣實(shí)現(xiàn)的,先確定大奇數(shù)m在二叉樹T中的位置,二叉樹T是從最頂端的結(jié)點(diǎn)3開始,依據(jù)奇數(shù)由小到大,由上到下,由左到右分布在二叉樹T上,即3為二叉樹T最頂?shù)慕Y(jié)點(diǎn),3往下分成二叉,左叉是5,右叉是7,5和7分別向下分成二叉,5和7成為向下分成二叉的根結(jié)點(diǎn),5的左叉是9,右叉是11,7的左叉是13,右叉是15,這樣一直分叉下去,從而形成二叉樹T(如圖1所示),二叉樹T從最頂?shù)?開始,從上往下形成多層結(jié)點(diǎn)層L,0≤L,每層有2L個(gè)奇數(shù)(如0層是20=1,1層是21=2, 2層是22=4….),第L層的第P個(gè)數(shù)的大小是:2×2L+1+2×(P-1),1≤P ≤2L,大奇數(shù)m在二叉樹T中的層數(shù)是K=-1(如m為501時(shí),K=7),然后,將大奇數(shù)m與二叉樹T中取整的K/2層及其以上層數(shù)中的奇數(shù)(如K為200時(shí),K/2=100. K為201時(shí),K/2=100,K/2以上層數(shù)即0層—200層)進(jìn)行相除,若某個(gè)奇數(shù)能除盡,則該奇數(shù)是大奇數(shù)m的因數(shù)。相除運(yùn)算采用多臺(tái)計(jì)算機(jī)同時(shí)進(jìn)行,即將二叉樹T中K/2層及其以上層數(shù)中的奇數(shù)分成數(shù)個(gè)層的子二叉樹Tn。具體是:先確定子二叉樹Tn的的層高h(yuǎn)0,0≤h0,依據(jù)層高h(yuǎn)0將二叉樹T分成數(shù)層子二叉樹樹組,每層子二叉樹樹組由D個(gè)子二叉樹Tn組成,D=2(S×(h0+1)),0≤S,S為子二叉樹樹組層,最上面子二叉樹樹組層是0,然后由上往下依次是1、2、……..,下層子二叉樹樹組中的子二叉樹Tn最頂端的結(jié)點(diǎn)是上層子二叉樹樹組中的子二叉樹Tn底部結(jié)點(diǎn)的其中一個(gè)叉。如圖2所示,最上面子二叉樹樹組層是0,該層只有一個(gè)子二叉樹樹T1,子二叉樹T1高度是3(包括有0層、1層、2層、3層),子二叉樹T1底部結(jié)點(diǎn)有8個(gè)(如圖1所示,分別為17、19、21、23、25、27、29、31),子二叉樹T1底部8個(gè)結(jié)點(diǎn)有16支樹杈(如圖1所示,分別為33、35、37、39、41、43、45、47、49、51、53、55、57、59、61、63),這樣,子二叉樹樹組層0下面的子二叉樹樹組層1就有16個(gè)子二叉樹(如圖2所示,分別是T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14、T15、T16、T17),而子二叉樹樹組層1下面的子二叉樹樹組層2就有D=2(2×(3+1))256個(gè)高度為3的子二叉樹Tn(n=18、19、……….273),以此類推,將K層以上的二叉樹分成數(shù)個(gè)高度為h0=3的子二叉樹Tn,然后,將數(shù)個(gè)子二叉樹Tn有機(jī)地分配(如平均分配)給數(shù)臺(tái)計(jì)算機(jī)或計(jì)算單元同時(shí)進(jìn)行大奇數(shù)m與子二叉樹Tn中的奇數(shù)進(jìn)行相除,以獲得大奇數(shù)m的因數(shù)。