一種大素數(shù)生成方法及其快速求余方法
【專利摘要】本發(fā)明提供一種大素數(shù)生成方法,通過簡單的素數(shù)預判斷方法,先排除大部分合數(shù),之后再進行素性判斷,可減少素性判斷的次數(shù),因此提高了速度。同時,在素數(shù)預判斷中若使用了對30求余的特殊計算方法,以少數(shù)次加法代替求余操作,進一步提高了計算速度。
【專利說明】一種大素數(shù)生成方法及其快速求余方法
【技術(shù)領域】
[0001]本發(fā)明涉及一種大素數(shù)生成方法及其快速求余方法。
【背景技術(shù)】
[0002]大素數(shù)生成是密碼學相關領域一個熱點問題,表現(xiàn)在兩個方面,一是概率問題,即生成的大素數(shù)誤判的概率有多大,目前均認為米勒-拉賓算法是誤判概率最小的、最佳的方法;二是速度問題,算法過程需要多次的素性判斷,耗時很長,很大程度限制了大部分產(chǎn)品的性能。在速度方面,目前已有一些研究成果,例如,2011-04-20公開的,申請?zhí)枮?00910057887.7的中國發(fā)明公開了一種適用于密碼學應用的素數(shù)生成方法,將隨機數(shù)和一系列小素數(shù)通過求最大公約數(shù)的方法進行素數(shù)預檢測,僅當該隨機數(shù)與這些小素數(shù)都互素時能夠通過素數(shù)預檢測,再將通過素數(shù)預檢測的隨機數(shù)進行素性檢測。由于通過預檢測的方法能夠排除掉一部分合數(shù),因而使得預檢測之后的素性檢測的循環(huán)次數(shù)能夠大大減少。其相對傳統(tǒng)的素數(shù)生成方法而言,能夠大幅改善素數(shù)生成的運算速度和時間。但由于該發(fā)明需要經(jīng)過多次的小素數(shù)求余或求最大公約數(shù),同時在判斷為合數(shù)后,步長較小(步長為2),需要經(jīng)過更多次的嘗試判斷,因此在一定程度上仍制約了運算速度。
【發(fā)明內(nèi)容】
[0003]本發(fā)明要解決的技術(shù)問題之一,在于提供一種大素數(shù)生成方法,優(yōu)化素數(shù)預判斷,先排除大部分合數(shù),之后再進行素性判斷,可減少素性判斷的次數(shù),避開了小素數(shù)的求余或求最大公約數(shù)的算法,同時增大步長,使運算速度更快。
[0004]本發(fā)明是這樣實現(xiàn)的:一種大素數(shù)生成方法,包括:
[0005]步驟20、求余計算 :設N=P1 X P2 X P3……Pn,且N>2,HP3……Pj為素數(shù)序列;
[0006]任取正整數(shù)n,得到對應的N,將Rn對N求余:
[0007]若N關30,Rn對N求余,余數(shù)記為Re,進入步驟30 ;
[0008]若N=30,則按下列方法計算:
[0009](I)將隨機數(shù)Rn的按十六進制表示時的所有半字節(jié)數(shù)據(jù)相加,得到的結(jié)果若大于16,則繼續(xù)將上一次相加得到的結(jié)果中所有半字節(jié)相加,直到當前相加的結(jié)果小于16,記為有效結(jié)果;
[0010](2)若(I)所得的有效結(jié)果為偶數(shù),則將有效結(jié)果加上15后作為最終結(jié)果,否則保留原值作為最終結(jié)果,此最終結(jié)果即為隨機數(shù)Rn對30求余的結(jié)果,余數(shù)記為Re,進入步驟30 ;
[0011]步驟30、素數(shù)預判斷:設數(shù)據(jù)序列為小于N的所有素數(shù)中刪除P1I2……Pn,并與I一起構(gòu)成的從小到大排列的序列;數(shù)據(jù)序列的數(shù)據(jù)個數(shù)記為Ln ;
[0012]判斷Re是否在所述數(shù)據(jù)序列中,若Re不在數(shù)據(jù)序列中,則判斷為合數(shù),認為未通過素數(shù)預判斷,進入步驟40 ;否則認為已通過素數(shù)預判斷,記錄余數(shù)Re在所述數(shù)據(jù)序列中的位置,并記為Idx,進入步驟50 ;
[0013]步驟40、取所述數(shù)據(jù)序列中第一個比余數(shù)Re大的數(shù)D,取Rm=Rn-Re+D。記錄余數(shù)Re在上述序列中的位置,記為Idx,進入步驟50 ;
[0014]步驟50、進行米勒-拉賓素性檢測算法判斷,若結(jié)果為素數(shù),則輸出素數(shù)后結(jié)束;若結(jié)果為合數(shù),則進入步驟60;
[0015]步驟60、根據(jù)Idx的數(shù)值作為索引,取步長序列對應的值進行加到原隨機數(shù),結(jié)果作為新隨機數(shù),同時Idx小于Ln時,Idx加I,若Idx=Ln,則記Idx=I,然后返回到步驟50,所述步長序列為數(shù)據(jù)序列的后項減去前項的差,其中最后一個步長等于第一項減去最后一項再加上N。
[0016]本發(fā)明要解決的技術(shù)問題之二,在于提供一種大素數(shù)生成方法中的快速求余方法,避開了小素數(shù)的求余或求最大公約數(shù)的算法,同時增大步長,使運算速度更快。
[0017]本發(fā)明具體包括如下步驟:一種大素數(shù)的快速求余方法,包括:生成隨機數(shù),并記為Rn,,SN=P1XP2XP3……Pn,且N〉2,HP3……PnI為素數(shù)序列;若N關30,Rn對N求余,余數(shù)記為Re ;若N=30,則按下列方法計算:
[0018](I)將隨機數(shù)Rn的按十六進制表示時的所有半字節(jié)數(shù)據(jù)相加,得到的結(jié)果若大于16,則繼續(xù)將上一次相加 得到的結(jié)果中所有半字節(jié)相加,直到當前相加的結(jié)果小于16,記為有效結(jié)果;
[0019](2)若(I)所得的有效結(jié)果為偶數(shù),則將有效結(jié)果加上15后作為最終結(jié)果,否則保留原值作為最終結(jié)果,此最終結(jié)果即為隨機數(shù)Rn對30求余的結(jié)果,余數(shù)記為Re。
[0020]本發(fā)明具有如下優(yōu)點:本發(fā)明的大素數(shù)生成方法,通過簡單的素數(shù)預判斷,先排除大部分合數(shù),之后再進行素性判斷,可減少素性判斷的次數(shù),因此提高了速度。本發(fā)明大素數(shù)的快速求余方法,避開了小素數(shù)的求余或求最大公約數(shù)的算法,同時通過變步長的方式,使平均步長提高(以N=30為例,提高至3.875),因而使速度更快。
【專利附圖】
【附圖說明】
[0021]下面參照附圖結(jié)合實施例對本發(fā)明作進一步的說明。
[0022]圖1為本發(fā)明方法執(zhí)行流程圖。
【具體實施方式】
[0023]如圖1所示,本發(fā)明的大素數(shù)生成方法,包括:
[0024]步驟10、生成隨機數(shù):若生成的隨機數(shù)為偶數(shù),則生成的隨機數(shù)加1,隨機數(shù)記為Rn ;這樣就可以先排除大部分合數(shù)。
[0025]步驟20、求余計算:設N=P1 X P2 X P3……Pn,且N>2,HP3……Pj為素數(shù)序列;
[0026]任取正整數(shù)n,得到對應的N,將Rn對N求余:
[0027]若N關30,Rn對N求余,余數(shù)記為Re,進入步驟30 ;
[0028]若N=30,則按下列方法計算:
[0029](I)將隨機數(shù)Rn的按十六進制表示時的所有半字節(jié)數(shù)據(jù)相加,得到的結(jié)果若大于16,則繼續(xù)將上一次相加得到的結(jié)果中所有半字節(jié)相加,直到當前相加的結(jié)果小于16,記為有效結(jié)果;
[0030]舉例:假設隨機數(shù)Rn為0xl23456789abc ;那么所有半字節(jié)數(shù)據(jù)相加的計算過程是這樣的:l+2+3+4+5+6+7+8+9+a+b+c=0x4e ;因為得到的結(jié)果0x4e大于16,則繼續(xù)將上一次相加得到的結(jié)果中所有半字節(jié)相加,即4+e=0xl2 ;得到的結(jié)果0x12大于16,再加一次,即1+2=3 ;此時3〈16,結(jié)束計算;
[0031](2)若(I)所得的有效結(jié)果為偶數(shù),則將有效結(jié)果加上15后作為最終結(jié)果,否則保留原值作為最終結(jié)果,此最終結(jié)果即為隨機數(shù)Rn對30求余的結(jié)果,余數(shù)記為Re,進入步驟30 ;
[0032]步驟30、素數(shù)預判斷:設數(shù)據(jù)序列為小于N的所有素數(shù)中刪除P1J2……Pn,并與I一起構(gòu)成的從小到大排列的序列;數(shù)據(jù)序列的數(shù)據(jù)個數(shù)記為Ln ;以N=2X3X5=30為例,所有小于N的素數(shù)包括2、3、5、7、11、13、17、19、23、29,刪除2,3,5,再添加1,得到數(shù)據(jù)序列為1,7,11,13,17,19,23,29 ;數(shù)據(jù)個數(shù) Ln=8 ;
[0033]判斷Re是否在所述數(shù)據(jù)序列中,若Re不在數(shù)據(jù)序列中,則判斷為合數(shù),認為未通過素數(shù)預判斷,進入步驟40 ;否則認為已通過素數(shù)預判斷,記錄余數(shù)Re在所述數(shù)據(jù)序列中的位置,并記為Idx,進入步驟50 ;
[0034]步驟40、取所述數(shù)據(jù)序列中第一個比余數(shù)Re大的數(shù)D,取R^Rn-Re+D。記錄余數(shù)Re在上述序列中的位置,記為Idx,進入步驟50 ;
[0035]步驟50、進行米勒-拉賓素 性檢測算法判斷,若結(jié)果為素數(shù),則輸出素數(shù)后結(jié)束;若結(jié)果為合數(shù),則進入步驟60;
[0036]步驟60、根據(jù)Idx的數(shù)值作為索引,取步長序列對應的值進行加到原隨機數(shù),結(jié)果作為新隨機數(shù),同時Idx小于Ln時,Idx加I,若Idx=Ln,則記Idx=I,然后返回到步驟50 ;
[0037]所述步長序列為數(shù)據(jù)序列的后項減去前項的差,其中最后一個步長等于第一項減去最后一項再加上N ;以N=30為例,所述步長序列為{6,4,2,4,2,4,6,2},這樣當Idx小于Ln=8 時,Idx 加 I,若 Idx=8 時,則記 Idx=I。
[0038]本發(fā)明所述數(shù)據(jù)序列是基于數(shù)論理論而設計的,相關理論如下:
[0039]以小素數(shù)2、3、5為例,所有不被2、3、5整除的數(shù)均可表示為30k+Ri,其中Ri為所述數(shù)據(jù)序列的值。從這些理論可以看出,所述對30求余的方法僅是其中的一種,類似的,還可以是對210、2310等求余。可根據(jù)具體情況類似地設計一些小素數(shù)進行素數(shù)預判斷方法,但以大于2為宜,這樣可以使步長大于2,提高計算速度。
[0040]本發(fā)明的大素數(shù)生成方法,通過簡單的素數(shù)預判斷,先排除大部分合數(shù),之后再進行素性判斷,可減少素性判斷的次數(shù),因此提高了速度。本發(fā)明大素數(shù)的快速求余方法,避開了小素數(shù)的求余或求最大公約數(shù)的算法,同時通過變步長的方式,使平均步長提高(以N=30為例,提高至3.875),因而使速度更快。以對30的求余為例,若沒有經(jīng)過素數(shù)預判斷,則每30個數(shù)據(jù)需要經(jīng)過15次的素性檢測,而經(jīng)過素數(shù)預判斷,則僅需8次素性檢測。明顯降低了素性檢測的次數(shù)。本發(fā)明與之前的素數(shù)預判斷方法對比,之前的素數(shù)預判斷需要對多個小素數(shù)作求余運算,同時其步長為2,在素數(shù)預判斷時需要大量的求余運算,而本發(fā)明僅需要少數(shù)次的加法就能完成素數(shù)預判斷,因此速度有進一步提高。
[0041]雖然以上描述了本發(fā)明的【具體實施方式】,但是熟悉本【技術(shù)領域】的技術(shù)人員應當理解,我們所描述的具體的實施例只是說明性的,而不是用于對本發(fā)明的范圍的限定,熟悉本領域的技術(shù)人員在依照本發(fā)明的精神所作的等效的修飾以及變化,都應當涵蓋在本發(fā)明的權(quán)利要求所保護的范圍內(nèi)。
【權(quán)利要求】
1.一種大素數(shù)生成方法,其特征在于:包括 步驟10、生成隨機數(shù):若生成的隨機數(shù)為偶數(shù),則生成的隨機數(shù)加1,隨機數(shù)記為Rn ; 步驟20、求余計算:設N=P1 X P2 X P3……Pn,且N >2,(P1, P2, P3……PnI為素數(shù)序列; 任取正整數(shù)n,得到對應的N,將Rn對N求余: 若N古30,Rn對N求余,余數(shù)記為Re,進入步驟30 ; 若N=30,則按下列方法計算: (1)將隨機數(shù)按十六進制表示時的所有半字節(jié)數(shù)據(jù)相加,得到的結(jié)果若大于16,則繼續(xù)將上一次相加得到的結(jié)果中所有半字節(jié)相加,直到當前相加的結(jié)果小于16,記為有效結(jié)果; (2)若(I)所得的有效結(jié)果為偶數(shù),則將有效結(jié)果加上15后作為最終結(jié)果,否則保留原值作為最終結(jié)果,此最終結(jié)果即為隨機數(shù)Rn對30求余的結(jié)果,余數(shù)記為Re,進入步驟30 ; 步驟30、素數(shù)預判斷:設數(shù)據(jù)序列為小于N的所有素數(shù)中刪除P1I2……Pn,并與I 一起構(gòu)成的從小到大排列的序列;數(shù)據(jù)序列的數(shù)據(jù)個數(shù)記為Ln ; 判斷Re是否在所述數(shù)據(jù)序列中,若Re不在數(shù)據(jù)序列中,則判斷為合數(shù),認為未通過素數(shù)預判斷,進入步驟40 ;否則 認為已通過素數(shù)預判斷,記錄余數(shù)Re在所述數(shù)據(jù)序列中的位置,并記為Idx,進入步驟50 ; 步驟40、取所述數(shù)據(jù)序列中第一個比余數(shù)Re大的數(shù)D,取Rm=Rn-Re+D。記錄余數(shù)Re在上述序列中的位置,記為Idx,進入步驟50 ; 步驟50、進行米勒-拉賓素性檢測算法判斷,若結(jié)果為素數(shù),則輸出素數(shù)后結(jié)束;若結(jié)果為合數(shù),則進入步驟60; 步驟60、根據(jù)Idx的數(shù)值作為索引,取步長序列對應的值進行加到原隨機數(shù),結(jié)果作為新隨機數(shù),同時Idx小于Ln時,Idx加I,若Idx=Ln,則記Idx=I,然后返回到步驟50,所述步長序列為數(shù)據(jù)序列的后項減去前項的差,其中最后一個步長等于第一項減去最后一項再加上N。
2.一種大素數(shù)的快速求余方法,其特征在于: 生成隨機數(shù),并記為Rn,,設N=P1 X P2 X P3……Pn,且N >2,(P1, P2, P3……Pj為素數(shù)序列; 若N關30,Rn對N求余,余數(shù)記為Re ; 若N=30,則按下列方法計算: (1)將隨機數(shù)按十六進制表示時的所有半字節(jié)數(shù)據(jù)相加,得到的結(jié)果若大于16,則繼續(xù)將上一次相加得到的結(jié)果中所有半字節(jié)相加,直到當前相加的結(jié)果小于16,記為有效結(jié)果; (2)若(I)所得的有效結(jié)果為偶數(shù),則將有效結(jié)果加上15后作為最終結(jié)果,否則保留原值作為最終結(jié)果,此最終結(jié)果即為隨機數(shù)Rn對30求余的結(jié)果,余數(shù)記為Re。
【文檔編號】G06F7/72GK103593162SQ201310515561
【公開日】2014年2月19日 申請日期:2013年10月28日 優(yōu)先權(quán)日:2013年10月28日
【發(fā)明者】蔣聲障, 張登峰, 余杭軍 申請人:福建升騰資訊有限公司