大数库GMP测试
- 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
- 用自己8位学号建两个文件夹xxxxxxxxsrc,xxxxxxxx,到GMP官网https://gmplib.org/下载最新代码到201x1xxxsrc,编译代码并把GMP库安装到201x1xxx文件夹。(5')
- 基于GMP的大数库编写测试代码测试大数运算,计算2的N次方,N为你学号的后四位(5')
- 基于GMP的大数库计算你以及前面5位同学和后面5位同学的8位学号的乘积,N为你学号的后四位(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位学号的乘积)
验证
可得结果正确。