使用c语言和GMP库实现伪随机算法笔记

步骤一:安装GMP库,两种方法选其一既可
1.使用源码安装方式:
1019477-20161010214552821-817245372.png

2.使用在线安装的方式:
1019477-20161010214647571-1561310889.png

步骤二:使用GMP库随机生成一个大数,样本代码如下:
使用c语言和GMP库实现伪随机算法笔记_第1张图片

步骤三:使用GMP库随机生成一个大数,并判断生成的大数是不是素数,样本代码如下:

使用c语言和GMP库实现伪随机算法笔记_第2张图片

步骤四:根据生成的大素数,产生下一个大素数,样本代码如下:
1019477-20161010214729508-1941760187.png

步骤五:根据随机产生的大素数和随机数,使用BlumBlumShus算法产生伪随机数,样本代码如下:
1):初始化将要使用的变量:

使用c语言和GMP库实现伪随机算法笔记_第3张图片

使用c语言和GMP库实现伪随机算法笔记_第4张图片

2):使用loop判断产生的大素数是否满足(prime_number_p_mod mod 4)=(prime_number_q_mod mod 4)=3;如果不满足则重新产生大素数,样本代码如下:
使用c语言和GMP库实现伪随机算法笔记_第5张图片

3):调用ran_num()函数,随机产生一个大数,样本代码如下:
1019477-20161010214826039-353607166.png

4):BlumBlumShus核心算法,样本代码示例:

使用c语言和GMP库实现伪随机算法笔记_第6张图片

步骤六:编写主函数,样本代码如下:
使用c语言和GMP库实现伪随机算法笔记_第7张图片

步骤七:使用GCC编译器进行编译,样本命令如下:
1019477-20161010214901305-1800175381.png

-Wall:显示编译时出现的警告信息。
-g -o :编译,连接生成random。
-std=c99:在c99模式进行编译。
-lgmp:链接GMP库。
步骤八:执行生成的random文件:
使用c语言和GMP库实现伪随机算法笔记_第8张图片

过程中使用到的主要GMP函数:
1019477-20161010214940211-436981892.png
1019477-20161010214945727-642415408.png
1019477-20161010214953024-836551742.png
1019477-20161010215003758-1687224726.png

使用BlumBlumShus算法和GMP库随机的生成一个随机数,使用GMP库来实现时,突破口在于是否会使用mpz_rrandomb()函数产生一个随机数以及使用mpz_probab_prime_p()函数判断产生的随机数是不是大素数,如果这两个问题解决了,那么接下来的算法实现都会迎刃而解。但是在实际的代码编写过程中,使用GMP库中的函数时,需要返回一个随机数或大素数时,与C语言中的方法是不相同的,具体实现可以参照以下简单例子:
使用c语言和GMP库实现伪随机算法笔记_第9张图片
从中我们可以知道只要在main函数中调用foo(r,n,20L)即可得到需要的返回值,如果使用return result会产生错误。

转载于:https://www.cnblogs.com/y3w3l/p/5947450.html

你可能感兴趣的:(c/c++)