專利名稱::一種計算整數(shù)的模數(shù)除法的余數(shù)的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計算模數(shù)的方法,具體的說是一種計算整數(shù)的模數(shù)除法的余數(shù)的方法。
背景技術(shù):
:整數(shù)m的模數(shù)值n,通常將其記為mmodn。求整數(shù)的模數(shù)有很大的現(xiàn)實意義,因為在很多情況下都需要求整數(shù)的模數(shù),比如在某些負載均衡方法,分組交換和傳輸,數(shù)字消息編/譯碼,計算機圖形學,除法運算中等。在現(xiàn)有的取模的算法中存在兩個方面的問題1)傳統(tǒng)的算法是通過迭代來實現(xiàn)的,這種迭代的方式使得計算需要很大的計算量。如果除數(shù)D-2N-1(N為自然數(shù))為n位整數(shù),被除數(shù)M為小于或等于(D-1)2的任何正整數(shù),即M最大時為2n位整數(shù),傳統(tǒng)的迭代方法需要6n次條件測試,2n次的乘法(或移位)和2n次加法。因此整個方法需要10n次還不包括賦值操作。由此可見計算量之大,不過被除數(shù)和除數(shù)可以取任意值。2)專利99109437.9提出一種計算模數(shù)除法的余數(shù)的非迭代方法,解決了由于迭代導致的計算量大的問題,該算法不依賴于模數(shù)運算除數(shù)的位數(shù)。但是這個算法有兩個前提條件就是除數(shù)的值必須等于2N-1(N為自然數(shù)),被除數(shù)的值應當小于或等于(D-l)2,但是大于或等于0。這就說明這種計算方法不能應用于被除數(shù)和除數(shù)為任意值得情況。
發(fā)明內(nèi)容本發(fā)明的目的在于克服上述不足之處,提供一種計算整數(shù)的模數(shù)除法的余數(shù)的方法,該方法采用流水線處理方式,便于硬件實現(xiàn),克服了傳統(tǒng)迭代方法的計算量大的不足,而且對于除數(shù)和被除數(shù)沒有特定的限制。為達到以上目的,本發(fā)明采取的技術(shù)方案是一種計算整數(shù)的模數(shù)除法的余數(shù)的方法,其特征在于其計算步驟如(1)通過和計算裝置連接的輸入設(shè)備或通過和計算裝置連接的存儲設(shè)備獲取被除數(shù)M、除數(shù)D,判斷M和D的大小關(guān)系如果M〈D,則余數(shù)I^M,結(jié)束計算,否則轉(zhuǎn)(2);(2)將被除數(shù)M轉(zhuǎn)換成二進制位M=M。x2。+M,x21+...+x2"-1,獲取各個權(quán)值的系數(shù)M,(^0口"-1)和二進制的位數(shù)";(3)根據(jù)被除數(shù)M確定流水線處理第1級輸入?yún)?shù)的個數(shù)如果2><M《2",其中/為集合{1,2,4,……,2"中的一個值,m為自然數(shù),那么流水線處理第1級輸入?yún)?shù)的個數(shù)A^2/;(4)根據(jù)各個權(quán)值的系數(shù)M,的結(jié)果查存儲在計算裝置內(nèi)的余數(shù)表,得到《/=0,l...w-l):當M^《"0"-l)時獲取余數(shù)表中除數(shù)i)所在行和M,對應的權(quán)值2'所在列的值/:,當M,-O時,(5)確定流水線處理第1級的輸入?yún)?shù)由(3)知流水線處理的第1級有AA個輸入?yún)?shù),由(2)知被除數(shù)被表示成二進制時的位數(shù)n,那么這W個輸入?yún)?shù)《,G'=0...iV-1)中的"個參數(shù)《,(/=0..."-1)即為(4)中所得到的"/=0,1』-l)的值,剩下的W-"個輸入值均為0,即《,=0(/=",...(6)確定流水線級數(shù)及每級子處理程序的數(shù)量由(3)知第1級流水線處理輸入?yún)?shù)的個數(shù)^=2_/,則A^",即/=2^,那么流水線處理級數(shù)為《,第1級流水線處理有2^個子處理流程,以此類推,第k級流水線處理有2""個輸入?yún)?shù),有2"個子處理流程;(7)確定子處理流程的輸入?yún)?shù)每個子處理流程有兩個輸入?yún)?shù),對于第)t級流水線處理總共有2—'個輸入?yún)?shù)^(/=0,1,...,2"+1-1),將這2"+'個輸入?yún)?shù)兩兩分組,作為2^個子處理流程的輸入,即第/-U(h2,4,6,…2—')個參數(shù)A(,—2),~—D作為第〃2個子處理流程的兩個輸入?yún)?shù);(8)開始子處理流程的計算過程首先將這兩個輸入?yún)?shù)相加,和必定大于等于o且小于兩倍的除數(shù),然后判斷和與除數(shù)的大小,如果所得的和小于除數(shù),那么把相加后的和作為下一級的輸入?yún)?shù),如果所得的和大于等于除數(shù)且小于兩倍的除數(shù),那么用和減去除數(shù),將這個差值作為下一級的輸入?yún)?shù);(9)判斷是否所有級的子處理流程均處理完畢,沒有轉(zhuǎn)步驟(7),否則最終計算結(jié)果即為余數(shù)的值。本發(fā)明具有以下優(yōu)點1.采用流水線處理方式,便于硬件實現(xiàn),2.克服了傳統(tǒng)迭代方法的計算量大的不足,3.對于除數(shù)和被除數(shù)沒有特定的限制。本發(fā)明有如下附圖圖1為計算整數(shù)的模數(shù)除法的余數(shù)的流程圖;圖2為流水線子處理流程的處理邏輯流程圖;圖3為流水線的單級子處理流程的流程圖;具體實施方式以下結(jié)合附圖對本發(fā)明作進一步詳細說明。圖1為計算整數(shù)的模數(shù)除法的余數(shù)的流程圖,如圖1所示,其計算步驟如下-(1)通過和計算裝置連接的輸入設(shè)備或通過和計算裝置連接的存儲設(shè)備獲取被除數(shù)M、除數(shù)D,判斷M和D的大小關(guān)系如果M〈D,則余數(shù)R二M,結(jié)束計算,否則轉(zhuǎn)(2);(2)將被除數(shù)M轉(zhuǎn)換成二進制位M=M。x2°+M,x21+...+M"x2"-1,獲取各個權(quán)值的系數(shù)M々、0D"-l)和二進制的位數(shù)";(3)根據(jù)被除數(shù)M確定流水線處理第1級輸入?yún)?shù)的個數(shù)如果2、MS2",其中/為集合{1,2,4,……,2"中的一個值,m為自然數(shù),那么流水線處理第1級輸入?yún)?shù)的個數(shù)iV-2j;(4)根據(jù)各個權(quán)值的系數(shù)M,的結(jié)果查存儲在計算裝置內(nèi)的余數(shù)表,得到r,(hO,l..."-1):當M,-1G、0"-1)時獲取余數(shù)表中除數(shù)Z)所在行和M,對應的權(quán)值2'所在列的值^;,當^,=0時,^=0;(5)確定流水線處理第1級的輸入?yún)?shù)由(3)知流水線處理的第1級有W個輸入?yún)?shù),由(2)知被除數(shù)被表示成二進制時的位數(shù)",那么這^個輸入?yún)?shù)及1,(/=0...^-1)中的"個參數(shù)及1,(/=0..."-1)即為(4)中所得到的"/=0,1..."-1)的值,剩下的7V-n個輸入值均為0,即《,=0(/=",...W—l);(6)確定流水線級數(shù)及每級子處理程序的數(shù)量由(3)知第1級流水線處理輸入?yún)?shù)的個數(shù)iV-2/,則JV-",即/=2",那么流水線處理級數(shù)為《,第1級流水線處理有2^'個子處理流程,以此類推,第k級流水線處理有"—"'個輸入?yún)?shù),有2"個子處理流程;(7)確定子處理流程的輸入?yún)?shù)每個子處理流程有兩個輸入?yún)?shù),對于第/t級流水線處理總共有2—1個輸入?yún)?shù)&(/=0,1,...,2"+1-l),將這2^+'個輸入?yún)?shù)兩兩分組,作為2"個子處理流程的輸入,即第/-1,《/=2,4,6,...20+|)個參數(shù)~_2),~—J乍為第〃2個子處理流程的兩個輸入?yún)?shù);(8)開始子處理流程的計算過程首先將這兩個輸入?yún)?shù)相加,和必定大于等于O且小于兩倍的除數(shù),然后判斷和與除數(shù)的大小,如果所得的和小于除數(shù),那么把相加后的和作為下一級的輸入?yún)?shù),如果所得的和大于等于除數(shù)且小于兩倍的除數(shù),那么用和減去除數(shù),將這個差值作為下一級的輸入?yún)?shù);(9)判斷是否所有級的子處理流程均處理完畢,沒有轉(zhuǎn)步驟(7),否則最終計算結(jié)果即為余數(shù)的值。圖2給出了流水線子處理流程的處理邏輯流程,即全部子處理流程的流程圖,圖3給出了流水線的單級子處理流程的流程圖,即每一級流水線內(nèi)的每一個子處理流程的流程圖。所說的余數(shù)表可以采用現(xiàn)有技術(shù)實現(xiàn),例如余數(shù)表可以采用表1的形式表l余數(shù)表的結(jié)構(gòu)2021222'模值^模值^模值^模值^其中行表示各個除數(shù)",列表示所有的二進制權(quán)值2',^是它所在列的二進制位2'與除數(shù)D所在行的模值,即s=2,.modD。表2為余數(shù)表的一個具體實施例表2余數(shù)表<table>tableseeoriginaldocumentpage8</column></row><table>下面結(jié)合表2、附圖,通過具體實施例進一步說明本發(fā)明所述的計算方法假設(shè)通過和計算裝置連接的輸入設(shè)備或通過和計算裝置連接的存儲設(shè)備獲取被除數(shù)M二29、除數(shù)D二3,存儲在計算裝置內(nèi)的余數(shù)表存儲有表2所示的信息,其具體計算步驟為(1)判斷M和D的大小關(guān)系,因為29>3,轉(zhuǎn)(2);(2)將被除數(shù)29轉(zhuǎn)化為11101,即29-lx20+0x2'+lx22+lx23+lx24,則Af。=l,M,=0,M2=1,M3=1,M4=1,位數(shù)w=5;(3)根據(jù)被除數(shù)M確定流水線處理第1級輸入?yún)?shù)的個數(shù)當;、4時,滿足24=16<29"8=256,且4為集合{1,2,4,8,16......2"1}中的一個值,則流水線處理第1級輸入?yún)?shù)的個數(shù)^=2/=8;(4)根據(jù)(2)得到的各個權(quán)值的系數(shù)M'的結(jié)果查余數(shù)表,得到"'.-0,l…;7—l):由(2)矢口M0=1,M2=1,M3=1,M4=1,查余數(shù)表的第1,3,4,5列得到r。-l,r2=U3=2,r4=1,而M,=0另卩么q=0,因此《的值為r0==0,r2=l,r3=2,r4=1;(5)確定流水線處理第1級的輸入?yún)?shù)由(3)知流水線處理的第1級有7V-8個輸入?yún)?shù),由(2)知被除數(shù)29表示成二進制時位數(shù)"=5。那么這8個輸入?yún)?shù)/1,(/=0...7)中的5個參數(shù)及,,(/=0...-1)即為(4)中所得到的"/=0,1..."-l)的值,即《。-l,《,-0,《2-l,i,3-2,^-l,剩下的3個輸入值均為0,即^=0,及16=0,及17=0;(6)確定流水線級數(shù)及每級子處理程序的數(shù)量由③知第1級流水線處理輸入?yún)?shù)的個數(shù)^=27'-8=23,即《=3,貝ljy、23-、2、4,那么流水線處理級數(shù)為《=3,第1級流水線處理有"-'=4個子處理流程,以此類推,第2級流水線處理有2""=23-2+'=4個輸入?yún)?shù),有2"=2"=2個子處理流程,第3級流水線處理有2"+1=23-3+1=2個輸入?yún)?shù),有2〃=23-、l個子處理流程;(7)確定子處理流程的輸入?yún)?shù)對于第1級流水線處理來說,有2"+'-23-w=8個輸入?yún)?shù)/^=0,1,...,7),將這8個輸入?yún)?shù)兩兩分組,作為2"=23-'=4個子處理流程的輸入,即第1、2(/-1,/(/=2,4,6廣.2"+'))個參數(shù)^,/u(^-2),^(,-D)作為第l個子處理流程的兩個輸入?yún)?shù),第3、4個參數(shù)&,&作為第2個子處理流程的兩個輸入?yún)?shù),第5、6個參數(shù);14,及15作為第3個子處理流程的兩個輸入?yún)?shù),第7、8個參數(shù)/16,及17作為第4個子處理流程的兩個輸入?yún)?shù);(8)開始子處理流程的計算過程第1級流水線中,第1個子處理流程的兩個輸入?yún)?shù)為^,及,^+^=0+1=1,所得的和小于除數(shù),則&。=1;第1級流水線中,第2個子處理流程的兩個輸入?yún)?shù)為及12,及13,i12+/13=1+2=3,所得的和等于除數(shù)且小于兩倍的除數(shù),則用和減去除數(shù)3-3=0,O小于除數(shù),則i^=3-3=0;第1級流水線中,第3個子處理流程的兩個輸入?yún)?shù)為^,及15,《4+i15-1+0=1,則及22=1;第l級流水線中,第4個子處理流程的兩個輸入?yún)?shù)為il6,i,7,716+il7=0,則及23=0;至此完成了第1級流水線的全部子處理流程;=l,i21=0,i22=l,i23=0;(9)判斷是否所有級的子處理流程均處理完畢,由于流水線處理級數(shù)為3,所以轉(zhuǎn)步驟(7);(7)確定子處理流程的輸入?yún)?shù)對于第2級流水線處理來說,有2"+1=23-2+1=4個輸入?yún)?shù)^,(/=0,1,2,3),將這4個輸入?yún)?shù)兩兩分組,作為20-23_2=2個子處理流程的輸入,即第l、2個參數(shù)72。,及21作為第1個子處理流程的兩個輸入?yún)?shù),第3、4個參數(shù)及22,*23作為第2個子處理流程的兩個輸入?yún)?shù);(8)開始子處理流程的計算過程第2級流水線中,第l個子處理流程的兩個輸入?yún)?shù)為/2。,&,&。+&=1,所得的和小于除數(shù),則*3。=1;第2級流水線中,第2個子處理流程的兩個輸入?yún)?shù)為*22,及23,及22+723-1,所得的和小于除數(shù),則/31=1;至此完成了第2級流水線的全部子處理流程;^-^"-"(9)判斷是否所有級的子處理流程均處理完畢,由于流水線處理級數(shù)為3,所以轉(zhuǎn)步驟(7);(7)確定子處理流程的輸入?yún)?shù)對于第3級流水線處理來說,有2"+1=23-3+1=2個輸入?yún)?shù)&(/=0,1),將這2個輸入?yún)?shù)分為一組,作為2"=23_3=1個子處理流程的輸入,即第l、2個參數(shù)&。,/31作為第1個子處理流程的兩個輸入?yún)?shù);(8)開始子處理流程的計算過程第3級流水線中,第1個子處理流程的兩個輸入?yún)?shù)為^。,&,A。+JR31=2,所得的和小于除數(shù);至此完成了第3級流水線的全部子處理流程;(9)判斷是否所有級的子處理流程均處理完畢,由于流水線處理級數(shù)為3,所以所有級的子處理流程均處理完畢,因此余數(shù)R二^。+i^-2,即29mod3-2。由本具體實施例可知本發(fā)明所述的計算整數(shù)的模數(shù)(除法的余數(shù))的方法是可行的,結(jié)果是準確的。本發(fā)明所述的計算整數(shù)的模數(shù)的方法采用流水線處理方式,便于硬件實現(xiàn),系統(tǒng)開銷小,計算速度快,克服了傳統(tǒng)迭代方法的計算量大的不足,而且對于除數(shù)和被除數(shù)沒有特定的限制,有很廣闊的應用前景。權(quán)利要求1.一種計算整數(shù)的模數(shù)除法的余數(shù)的方法,其特征在于其計算步驟如下(1)通過和計算裝置連接的輸入設(shè)備或通過和計算裝置連接的存儲設(shè)備獲取被除數(shù)M、除數(shù)D,判斷M和D的大小關(guān)系如果M<D,則余數(shù)R=M,結(jié)束計算,否則轉(zhuǎn)(2);(2)將被除數(shù)M轉(zhuǎn)換成二進制位M=M0×20+M1×21+...+Mn-1×2n-1,獲取各個權(quán)值的系數(shù)Mi(i=0□n-1)和二進制的位數(shù)n;(3)根據(jù)被除數(shù)M確定流水線處理第1級輸入?yún)?shù)的個數(shù)如果2j<M≤22j,其中j為集合{1,2,4,……,2m}中的一個值,m為自然數(shù),那么流水線處理第1級輸入?yún)?shù)的個數(shù)N=2j;(4)根據(jù)各個權(quán)值的系數(shù)Mi的結(jié)果查存儲在計算裝置內(nèi)的余數(shù)表,得到ri(i=0,1...n-1)當Mi=1(i=0~n-1)時獲取余數(shù)表中除數(shù)D所在行和Mi對應的權(quán)值2i所在列的值ri,當Mi=0時,ri=0;(5)確定流水線處理第1級的輸入?yún)?shù)由(3)知流水線處理的第1級有N個輸入?yún)?shù),由(2)知被除數(shù)被表示成二進制時的位數(shù)n,那么這N個輸入?yún)?shù)R1i(i=0...N-1)中的n個參數(shù)R1i(i=0...n-1)即為(4)中所得到的ri(i=0,1...n-1)的值,剩下的N-n個輸入值均為0,即R1i=0(i=n,...N-1);(6)確定流水線級數(shù)及每級子處理程序的數(shù)量由(3)知第1級流水線處理輸入?yún)?shù)的個數(shù)N=2j,則N=2q,即j=2q-1,那么流水線處理級數(shù)為q,第1級流水線處理有2q-1個子處理流程,以此類推,第k級流水線處理有2q-k+1個輸入?yún)?shù),有2q-k個子處理流程;(7)確定子處理流程的輸入?yún)?shù)每個子處理流程有兩個輸入?yún)?shù),對于第k級流水線處理總共有2q-k+1個輸入?yún)?shù)Rki(i=0,1,...,2q-k+1-1),將這2q-k+1個輸入?yún)?shù)兩兩分組,作為2q-k個子處理流程的輸入,即第i-1,i(i=2,4,6,…2q-k+1)個參數(shù)Rk(i-2),Rk(i-1)作為第i/2個子處理流程的兩個輸入?yún)?shù);(8)開始子處理流程的計算過程首先將這兩個輸入?yún)?shù)相加,和必定大于等于0且小于兩倍的除數(shù),然后判斷和與除數(shù)的大小,如果所得的和小于除數(shù),那么把相加后的和作為下一級的輸入?yún)?shù),如果所得的和大于等于除數(shù)且小于兩倍的除數(shù),那么用和減去除數(shù),將這個差值作為下一級的輸入?yún)?shù);(9)判斷是否所有級的子處理流程均處理完畢,沒有轉(zhuǎn)步驟(7),否則最終計算結(jié)果即為余數(shù)的值。全文摘要一種計算整數(shù)的模數(shù)除法的余數(shù)的方法,涉及計算模數(shù)的方法,其特征在于其計算步驟如下1判斷M和D的大小關(guān)系;2將被除數(shù)M轉(zhuǎn)換成二進制位;3根據(jù)被除數(shù)M確定流水線處理第1級輸入?yún)?shù)的個數(shù);4根據(jù)各個權(quán)值的系數(shù)M<sub>i</sub>(i=0□n-1)的結(jié)果查存儲在計算裝置內(nèi)的余數(shù)表,得到r<sub>i</sub>(i=0,1...n-1);5確定流水線處理第1級的輸入?yún)?shù);6確定流水線級數(shù)及每級子處理程序的數(shù)量;7確定子處理流程的輸入?yún)?shù);8開始子處理流程的計算過程;9判斷是否所有級的子處理流程均處理完畢,沒有轉(zhuǎn)步驟7,否則最終計算結(jié)果即為余數(shù)的值。本發(fā)明所述的計算整數(shù)的模數(shù)除法的余數(shù)的方法采用流水線處理方式,便于硬件實現(xiàn),克服了傳統(tǒng)迭代方法的計算量大的不足,而且對于除數(shù)和被除數(shù)沒有特定的限制。文檔編號G06F7/60GK101276268SQ20081009769公開日2008年10月1日申請日期2008年5月23日優(yōu)先權(quán)日2008年5月23日發(fā)明者丁國榮,張偉偉,晶徐,進汪,兵范,煒許,陳麗萍,建黃申請人:武漢飛思科技有限公司