一種基于計算機處理大整數的算法
【專利摘要】本發明公開了一種基于計算機處理大整數的算法,包括如下步驟:S1、手工或從文件中輸入的大整數數據到計算機中存儲;S2、通過預處理單元對S1中輸入的大整數數據進行預處理;S3、對S2中預處理后得到的預處理數據,通過計算機中計算處理單元對預處理數據進行計算;S4、對S3中預處理數據計算得出的結果通過計算機中結果處理單元進行輸出處理。本發明采用動態分配的字符串作為大整數的存儲結構,可以進行4000位以上十進制整數的加法、減法、乘法、乘方、開平方、Euclid除法、除法和整除性測試,解決了現有計算機進行大整數計算時不精確的問題。
【專利說明】
一種基于計算機處理大整數的算法
技術領域
[0001]本發明涉及計算機算法技術領域,具體為一種基于計算機處理大整數的算法。
【背景技術】
[0002]在國家軍事、政治、外交、經濟、商業等領域的信息安全問題中,在計算機科學、數學等領域的科學研究中,常常涉及或者必須考察“大”到數十位甚至上百位十進制整數的有關計算,有時候甚至要求計算精度達到小數點后數十位甚至上百位(多位小數的有關計算都可以化為整數的有關計算)。比如我國“兩彈一星”理論設計和實際試驗中有些數據要計算到小數點后數十位。又如在軍事信息安全領域中,有的地方要用到RSA、ELGamal或ECDLP密碼算法或數字簽名算法,這些算法都離不開大整數的運算,甚至涉及有關大素數的整數運算,諸如大整數的加法、乘法、乘法階、乘法逆、最大公約數、因子分解以及同余等問題,其它密碼算法或數字簽名算法也會涉及大大整數的運算。再如軍事領域很多地方要用到偽隨機數,而偽隨機數一般是用偽隨機序列產生或者用同余式計算得到的,這二者都離不開有關大整數的計算。現有的大整數計算技術不能完全滿足這些領域的專門需要或者在一定程度上制約著這些領域有關課題的研究和發展。
【發明內容】
[0003]本發明的目的在于提供一種基于計算機處理大整數的算法,以解決上述【背景技術】中提出的問題。
[0004]為實現上述目的,本發明提供如下技術方案:
一種基于計算機處理大整數的算法,包括如下步驟:
51、手工或從文件中輸入的大整數數據到計算機中存儲;
52、通過預處理單元對SI中輸入的大整數數據進行預處理;
53、對S2中預處理后得到的預處理數據,通過計算機中計算處理單元對預處理數據進行計算;
54、對S3中預處理數據計算得出的結果通過計算機中結果處理單元進行輸出處理。
[0005]優選的,SI輸入的大整數數據采用動態分配字符串作為大整數的存儲結構。
[0006]優選的,所述預處理單元是用來刪除SI輸入大整數數據中所有的空格和刪除輸入數據前面多余的數字“O”以及判斷輸入的數據是不是整數。
[0007]優選的,所述計算處理單元包括基本運算模塊、乘方與開方模塊、階乘與因子模塊、素數模塊、最大公約數模塊、特殊數模塊、不定方程模塊、同余式模塊。
[0008]優選的,結果處理單元是用于對S3的計算結果數據的整數部分從后向前每隔一個固定的位數就插入一個空格,對計算結果數據的小數部分從前向后每隔一個固定的位數就插入一個空格。
[0009]本發明采用動態分配的字符串作為大整數的存儲結構,可以進行4000位以上十進制整數的加法、減法、乘法、乘方、開平方、Euclid除法、除法和整除性測試,解決了現有計算機進行大整數計算時不精確的問題。除法運算可精確到小數點后1023位以上,其中開平方運算可精確到小數點后3000位以上,乘方運算可以計算出2的13604次方、3的8583次方、5的5859次方、5的5859次方、7的4846次方等等;可以計算1493以內十進制正整數的階乘、4000位以上十進制正整數的階乘因子和最大公約數、2000位以上十進制正整數的最小公倍數;可以計算參數在2506以內的二項式系數、參數在458以內的Stirling數和參數在1254以內的Catalan數;可以計算斐波那契數到19598項以內;可以求解系數在十進制2000位以上的二元一次、三元一次不定方程和系數在十進制16位以內的一元二次方程;可以計算十進制2000位以內正整數的乘法逆,求解系數在十進制2000位以內的一次同余方程和方程組;可以成功地對16位以內的十進制正整數進行素性判定和因子分解。一元二次方程、素性判定和因子分解等問題的計算復雜性高,速度一般較慢,因此這里對其范圍限制得很小。
【具體實施方式】
[0010]下面將結合具體實施例,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0011 ] —種基于計算機處理大整數的算法,包括如下步驟:
S1、手工或從文件中輸入的大整數數據到計算機中存儲;SI輸入的大整數數據采用動態分配字符串作為大整數的存儲結構。
[0012]S2、通過預處理單元對SI中輸入的大整數數據進行預處理;所述預處理單元是用來刪除SI輸入大整數數據中所有的空格和刪除輸入數據前面多余的數字“O”以及判斷輸入的數據是不是整數。
[0013]S3、對S2中預處理后得到的預處理數據,通過計算機中計算處理單元對預處理數據進行計算;所述計算處理單元包括基本運算模塊、乘方與開方模塊、階乘與因子模塊、素數模塊、最大公約數模塊、特殊數模塊、不定方程模塊、同余式模塊。
[0014]S4、對S3中預處理數據計算得出的結果通過計算機中結果處理單元進行輸出處理;結果處理單元是用于對S3的計算結果數據的整數部分從后向前每隔一個固定的位數就插入一個空格,對計算結果數據的小數部分從前向后每隔一個固定的位數就插入一個空格。
[0015]本發明中,計算處理單元包括基本運算模塊、乘方與開方模塊、階乘與因子模塊、素數模塊、最大公約數模塊、特殊數模塊、不定方程模塊、同余式模塊。
[0016]基本運算模塊:圓周率的近似值,加法,減法,乘法,除法、Euclid除法,整除性測試。
[0017]乘方與開方模塊:方根化簡,乘方,一個正整數在另一正整數中的方次數,平方根。
[0018]階乘與因子模塊:階乘,階乘因子,正整數的因子分解。
[0019][素數模塊:最小素因子,素性測試,Euler函數。
[0020]最大公約數模塊:最大公約數,最小公倍數。
[°021 ]特殊數模塊:二項式系數,斐波那契數,第一模塊Stirl ing數,第二模塊Stirl ing數,Catalan 數。
[0022]不定方程模塊:二元一次不定方程ax-by = l,二元一次不定方程ax+by = c,三元一次不定方程ax+by+cz = n,勾股數,整系數二元一次方程。
[0023]同余式模塊:一個正整數關于另一個正整數的乘法階,一個正整數關于另一個正整數的乘法逆,一元一次同余方程,一元一次同余方程組。
[0024]盡管已經示出和描述了本發明的實施例,對于本領域的普通技術人員而言,可以理解在不脫離本發明的原理和精神的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發明的范圍由所附權利要求及其等同物限定。
【主權項】
1.一種基于計算機處理大整數的算法,其特征在于,包括如下步驟: 51、手工或從文件中輸入的大整數數據到計算機中存儲; 52、通過預處理單元對SI中輸入的大整數數據進行預處理; 53、對S2中預處理后得到的預處理數據,通過計算機中計算處理單元對預處理數據進行計算; 54、對S3中預處理數據計算得出的結果通過計算機中結果處理單元進行輸出處理。2.根據權利要求1所述的一種基于計算機處理大整數的算法,其特征在于:S1輸入的大整數數據采用動態分配字符串作為大整數的存儲結構。3.根據權利要求1所述的一種基于計算機處理大整數的算法,其特征在于:所述預處理單元是用來刪除SI輸入大整數數據中所有的空格和刪除輸入數據前面多余的數字“O”以及判斷輸入的數據是不是整數。4.根據權利要求1所述的一種基于計算機處理大整數的算法,其特征在于:所述計算處理單元包括基本運算模塊、乘方與開方模塊、階乘與因子模塊、素數模塊、最大公約數模塊、特殊數模塊、不定方程模塊、同余式模塊。5.根據權利要求1所述的一種基于計算機處理大整數的算法,其特征在于:結果處理單元是用于對S3的計算結果數據的整數部分從后向前每隔一個固定的位數就插入一個空格,對計算結果數據的小數部分從前向后每隔一個固定的位數就插入一個空格。
【文檔編號】G06F7/491GK105824600SQ201610277629
【公開日】2016年8月3日
【申請日】2016年4月30日
【發明人】王娟
【申請人】安徽碩尼信息科技有限公司