使用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会产生错误。

原文地址:https://www.cnblogs.com/y3w3l/p/5947450.html