使用c語言和GMP庫實現偽隨機算法筆記


步驟一:安裝GMP庫,兩種方法選其一既可
1.使用源碼安裝方式:

2.使用在線安裝的方式:

步驟二:使用GMP庫隨機生成一個大數,樣本代碼如下:

步驟三:使用GMP庫隨機生成一個大數,並判斷生成的大數是不是素數,樣本代碼如下:

步驟四:根據生成的大素數,產生下一個大素數,樣本代碼如下:

步驟五:根據隨機產生的大素數和隨機數,使用BlumBlumShus算法產生偽隨機數,樣本代碼如下:
1):初始化將要使用的變量:

2):使用loop判斷產生的大素數是否滿足(prime_number_p_mod mod 4)=(prime_number_q_mod mod 4)=3;如果不滿足則重新產生大素數,樣本代碼如下:

3):調用ran_num()函數,隨機產生一個大數,樣本代碼如下:

4):BlumBlumShus核心算法,樣本代碼示例:

步驟六:編寫主函數,樣本代碼如下:

步驟七:使用GCC編譯器進行編譯,樣本命令如下:

-Wall:顯示編譯時出現的警告信息。
-g -o :編譯,連接生成random。
-std=c99:在c99模式進行編譯。
-lgmp:鏈接GMP庫。
步驟八:執行生成的random文件:

過程中使用到的主要GMP函數:



使用BlumBlumShus算法和GMP庫隨機的生成一個隨機數,使用GMP庫來實現時,突破口在於是否會使用mpz_rrandomb()函數產生一個隨機數以及使用mpz_probab_prime_p()函數判斷產生的隨機數是不是大素數,如果這兩個問題解決了,那么接下來的算法實現都會迎刃而解。但是在實際的代碼編寫過程中,使用GMP庫中的函數時,需要返回一個隨機數或大素數時,與C語言中的方法是不相同的,具體實現可以參照以下簡單例子:

從中我們可以知道只要在main函數中調用foo(r,n,20L)即可得到需要的返回值,如果使用return result會產生錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM