大数库GMP测试

发布时间 2023-04-11 21:34:40作者: 西宁西

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

sudo apt-get install m4  //默认没安装,gmp用这个
tar -jvxf gmp-6.2.1.tar.bz2    //解压
cd gmp-6.2.1
./configure --enable-cxx    //开启c++支持
make
make check   //注意必须检测一下,gmp官方特别提醒的
sudo make install

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

三、计算2的N次方,N为你学号的后四位
1.代码

#include<gmp.h>
#define N 1212
int main()
{
    mpz_t a,c;
    mpz_init(a);
    mpz_init(c);

    mpz_init_set_ui(a, 2);
    mpz_pow_ui(c, a, N);
    gmp_printf("2^%d = %Zd\n", N, c);

    mpz_clear(a);
    mpz_clear(c);
    return 0;
}

2.结果

3.验证

四、计算你以及前面5位同学和后面5位同学的8位学号的乘积
1.代码

#include<gmp.h>
#define N 20201212
int main()
{
    mpz_t a[11], b;
    mpz_init(b);
    mpz_init_set_str(b, "1", 10);

    const  char s[11][9]={"20201207","20201208","20201209","20201210","20201211","20201212","20201213","20201214","20201215","20201216","20201217"};
    int i;
    for(i=0;i<11;i++)
    {
         mpz_init(a[i]);
         mpz_init_set_str(a[i],s[i], 10);
         mpz_mul(b, b, a[i]);
    }

    gmp_printf("%d*%d*%d*%d*%d*%d*%d*%d*%d*%d*%d = \n%Zd\n", N-5, N-4, N-3, N-2, N-1, N, N+1, N+2, N+3, N+4, N+5, b);
    for(i=0;i<11;i++){
    	mpz_clear(a[i]);
    }

    mpz_clear(b);
    return 0;
}

2.结果

3.验证