大数库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‘)
- 提交代码(或代码链接)和运行结果截图
环境配置
···
./configure --enable-cxx
make
make check //注意必须检测一下,gmp官方特别提醒
sudo make install
···
C++环境中:
·g++ test.c -o test -lgmp·
C语言环境中:
·gcc -i头文件 -L库目录 -l库名·
2的1210次方
#include <iostream>
#include <gmpxx.h>
using namespace std;
int main()
{
mpz_t a,b,c;
mpz_init_set_str(a,"2",10);
mpz_init_set_str(b,"2",10);
for(int i=0;i<=1209;i++)
{
mpz_mul(b,b,a);
}
gmp_printf("%Zd\n",b);
mpz_clear(a);
mpz_clear(b);
return 0;
}
11大数连乘
#include <gmp.h>
#include <string.h>
int main(int argc, const char *argv[])
{
mpz_t z_r, z_1210, z_1;
mpz_init_set_str(z_r, "1", 10);
mpz_init_set_str(z_1210, "1205", 10);
mpz_init_set_str(z_1, "1", 10);
int i;
for (i = 1210; i <= 1220; i++)
{
mpz_mul(z_r, z_r, z_1210);
mpz_add(z_1210,z_1210,z_1);
}
gmp_printf("%Zd\n",z_r);
mpz_clear(z_r);
mpz_clear(z_1210);
mpz_clear(z_1);
getchar();
return 0;
}
星光荡开宇宙