首页 > 其他分享 >大素数

大素数

时间:2023-06-01 09:12:55浏览次数:37  
标签:temp state number 素数 gmp mpz

任务详情

  1. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
  2. 利用大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现 GenerateLargePrime 函数(10‘)
  3. 在测试代码中产生一个在范围l = 2^255至u = 2^256-1内的素数。(5‘)
  4. 用OpenSSL验证你产生的素数是不是正确(5’)
  5. 提交代码和运行结果截图

代码

  • 利用大整数库(GMP或者OpenSSL),实现 GenerateLargePrime 函数,输入:l(素数所在范围的下界)、u(素数所在范围的上界),输出:p(一个在l,…,u区间内的随机素数)

     

#include <gmp.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// Generate a random large prime number between lower and upper bounds
void GenerateLargePrime(mpz_t p, mpz_t l, mpz_t u) {
    mpz_t temp;
    mpz_init(temp);

    gmp_randstate_t state;
    gmp_randinit_default(state);
    gmp_randseed_ui(state, time(NULL));

    do {
        mpz_urandomm(temp, state, u); // Generate a random number between 0 and u
        mpz_add(temp, temp, l);       // Add l to the random number to get a number between l and u
        mpz_nextprime(p, temp);       // Find the next prime number after temp
    } while (mpz_cmp(p, u) > 0);    // Repeat until the prime number is within the range [l, u]

    mpz_clear(temp);
    gmp_randclear(state);
}

int main() {
    mpz_t l, u, p;
    mpz_init(l);
    mpz_init(u);
    mpz_init(p);

    mpz_set_str(l, "57896044618658097711785492504343953926634992332820282019728792003956564819968", 10); // Set lower bound 2^255
    mpz_set_str(u, "115792089237316195423570985008687907853269984665640564039457584007913129639935", 10); // Set upper bound 2^256-1

    GenerateLargePrime(p, l, u);

    gmp_printf("Large prime: %Zd\n", p);

    mpz_clear(l);
    mpz_clear(u);
    mpz_clear(p);

    return 0;
}

 

运行

 

标签:temp,state,number,素数,gmp,mpz
From: https://www.cnblogs.com/sztsao/p/17447925.html

相关文章

  • 密码工程-大素数
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交代码和运行结......
  • 密码工程-大素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交代......
  • 反素数深度分析
    今天要我要讲的是反素数,在ACM中也算是常见的考点,那么对于搞ACM的同学来说,很有必要搞清楚它,所以接下来我会很详细地讲解。在讲解反素数之前,我们先来看反素数的概念。反素数的定义:对于任何正整数,其约数个数记为,例如,如果某个正整数满足:对任意的正整           数,都有,那么......
  • 找素数
    packagecom.Demo;//找素数publicclassTest7{publicstaticvoidmain(String[]args){System.out.println("当前素数的个数是:"+sea(101,200));}publicstaticintsea(intstart,intend){intcount=0;//定义一个for循环找到10......
  • 孪生素数
    一问题描述相差为2的两个素数成为一对孪生素数,求出一千以内的孪生素数。二设计思路设计一个函数调用判断两个相差2的数是否是孪生素数。三程序流程图 四伪代码实现#include<iostream>#include<math.h>usingnamespacestd;intprime(intn){ intj; longk;k=sqrt(n)+1; ......
  • day 39 素数
    1.给出start与end;2.有数i,遍历start~end中的素数;3.输出; #include<iostream>#include<cmath>usingnamespacestd;intmain(void){intm,n;intflag;printf("请输入start,end:\n");scanf("%d%d",&m,&n);for(inti=m;......
  • 有关素数的基础算法 素性测试 埃氏筛法
    所谓素数,是指恰好有两个约数的正整数。因为n的约数都小于n,所以只需要检查2~ n-1之间所有的整数是否整除n就能判定n是不是素数。如果d是n的约数,那么n/d也是n的约数。由n=d*n/d可知min(d,n/d)  ,所以只需要检查2~ 之间的所有整数就足够了。同理可知,整数分解和约数枚举都......
  • 可逆素数
    一问题描述从小到大输出所有的四位可逆素数。可逆素数指反过来依旧为素数的数。二设计思路首先将全部的素数求出存入数组,然后判断是否逆过来依旧为素数,若是输出。 四伪代码实现#include<iostream>usingnamespacestd;intfunc(inta){ for(inti=2;i<a;i++){ if(a%i==0){......
  • Netbeans开发—JAVA 作业之求素数
        JAVA课上的一个作业:求比给定的数小的所有素数并打印出来    准备工作:    1)用Netbeans新建一个JavaApplication     2)创建文件目录(根据个人习惯创建文件目录),我的目录如下:        3)创建本工程的JAVA文件:Prime.java              ......
  • 1013 数素数(C++)
    一、问题描述:令 Pi​ 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM​ 到 PN​ 的所有素数。输入格式:输入在一行中给出 M 和 N,其间以空格分隔。输出格式:输出从 PM​ 到 PN​ 的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。输......