zoukankan      html  css  js  c++  java
  • 使用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会产生错误。

  • 相关阅读:
    TCP/IP断网仍然显示连通状态禁止“媒体感知”
    ASP.NET页面优化,提高载入速度方法大全
    国家气象局提供
    datatable&list<T>
    windows mobile C# net3.5 如何捕捉Arrow的CheckBox的KeyDown事件?
    hhclass 类 RAPI OpenNETCF.Desktop.Communication.DLL相关下载
    string和stringBuilder区别
    windows mobile全屏设置笔记
    CSS浮动(float,clear)通俗讲解
    js图片延时加载(jquery特效)
  • 原文地址:https://www.cnblogs.com/y3w3l/p/5947450.html
Copyright © 2011-2022 走看看