大数库GMP测试

大数库GMP测试

  1. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
  2. 用自己8位学号建两个文件夹xxxxxxxxsrc,xxxxxxxx,到GMP官网https://gmplib.org/下载最新代码到201x1xxxsrc,编译代码并把GMP库安装到201x1xxx文件夹。(5')
  3. 基于GMP的大数库编写测试代码测试大数运算,计算2的N次方,N为你学号的后四位(5')
  4. 基于GMP的大数库计算你以及前面5位同学和后面5位同学的8位学号的乘积,N为你学号的后四位(5')
  5. 提交代码(或代码链接)和运行结果截图

用openeuler虚拟机

安装gmp

版本gmp-6.2.1.tar.lz

sudo apt-get install m4
sudo apt-get install lzip
lzip -d gmp-6.2.1.tar.lz
tar -xvf gmp-6.2.1.tar
之后按如下步骤操作
$cd gmp-6.2.1
$./configure --enable-cxx
$make
$make check
$sudo make install

因为课前就完成了gmp下载,所以没有再次重新下载到20191315src和20191315学号文件夹里

计算2的N次方,N为你学号的后四位;计算你以及前面5位同学和后面5位同学的8位学号的乘积

代码

#include<gmp.h>
int main()
{
    mpz_t a,c, b[11], c1[11], d;
    mpz_init(a);
    mpz_init(c);
    mpz_init(d);
    mpz_init_set_str(d, "1", 10);
    mpz_init_set_ui(a, 2);
    mpz_pow_ui(c, a, 1315);
    gmp_printf("c = %Zd\n", c);

    const  char s[11][9]={"20191310","20191311","20191312","20191313","20191314","20191315","20191316","20191317","20191318","20191319","20191320"};
    int i;
    for(i=0;i<11;i++)
    { 
         mpz_init(b[i]);
         mpz_init_set_str(b[i],s[i], 10);
         mpz_mul(d, d, b[i]); 
    }

    gmp_printf("d = %Zd\n", d); 
    for(i=0;i<11;i++){
    mpz_clear(b[i]);
    
    }
    mpz_clear(a);  
    mpz_clear(c); 
    mpz_clear(d); 
    return 0; 

}

结果

c=2^1315(2的N次方,N为你学号的后四位)
d=20191310~20191320 11个数的乘积(你以及前面5位同学和后面5位同学的8位学号的乘积)

验证

可得结果正确。

posted @ 2022-05-05 15:13  绒绒的欧嘛harper  Views(108)  Comments(0Edit  收藏  举报
*/