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

摘要:
步骤8:执行生成的随机文件:过程中使用的主要GMP函数:使用BlumBlumShus算法和GMP库随机生成一个随机数。当使用GMP库实现这一点时,突破点在于是否会使用mpz _ rrandomb()函数生成一个随机数并使用mpz_ probab_ prime _ p()函数确定生成的随机数是否为大素数。如果解决了这两个问题,那么下面的算法实现将很容易解决。

步骤一:安装GMP库,两种方法选其一既可
1.使用源码安装方式:
使用c语言和GMP库实现伪随机算法笔记第1张

2.使用在线安装的方式:
使用c语言和GMP库实现伪随机算法笔记第2张

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

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

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

步骤四:根据生成的大素数,产生下一个大素数,样本代码如下:
使用c语言和GMP库实现伪随机算法笔记第5张

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

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

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

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

3):调用ran_num()函数,随机产生一个大数,样本代码如下:
使用c语言和GMP库实现伪随机算法笔记第9张

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

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

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

步骤七:使用GCC编译器进行编译,样本命令如下:
使用c语言和GMP库实现伪随机算法笔记第12张

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

过程中使用到的主要GMP函数:
使用c语言和GMP库实现伪随机算法笔记第14张
使用c语言和GMP库实现伪随机算法笔记第15张
使用c语言和GMP库实现伪随机算法笔记第16张
使用c语言和GMP库实现伪随机算法笔记第17张

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

免责声明:文章转载自《使用c语言和GMP库实现伪随机算法笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HTTP、HTTPS、SOCKS代理的概念(到底是什么意思?)Vs 正则表达式 查找替换 微软权威参考下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C语言 goto语句

/* goto语句 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:...

C语言Windows程序开发—CreateWindow函数介绍【第03天】

(一)CreateWindow函数的参数介绍: 1 HWND CreateWindow( 2 LPCTSTR lpClassName, //Windows窗口中预定义的控件结构体,包括:BUTTON(按钮),EDIT(文本框),LISTBOX(列表),MDICLIENT(子窗口),SCROLLBAR(滚动条),RICHEDIT(富文...

中国石油大学(华东)计算机复试C语言参考题库

目录 复试c语言 【研究创新型】8.1 谁能出线 【设计型】8.2 统计素数的个数 【设计型】8.3 数组逆序输出 【设计型】8.4 在屏幕上显示杨辉三角形 【设计型】8.5 求最大值 【设计型】8.6 二维数组 【设计型】8.11 存储并输出一个矩阵 【设计型】8.7 给数组中的元素按顺序编号 【设计型】8.8 求各位数字组成的最大数 【设计型】8...

[转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测

Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较。 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。Canny边缘检测算子是John F. Canny于1986年开发出来的一个多级边缘检...

C语言复习之输入多个空格,保留一个

1 #include <stdio.h> 2 3 int main() 4 { 5 int c = 0,flag = 0; 6 printf("Clear blanks"); 7 while((c=getchar()) != EOF) 8 { 9 if(c == ' ')10...

浙大版《C语言程序设计(第3版)》题目集 练习2-12 输出华氏-摄氏温度转换表 (15 分)

练习2-12 输出华氏-摄氏温度转换表 (15 分) 输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。 温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。 输入格式: 在一行中输入2个整数,分别表示lower...