大数库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. 提交代码(或代码链接)和运行结果截图

环境配置

···
./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;
}

posted @ 2022-05-05 15:06  pogbar  阅读(105)  评论(0编辑  收藏  举报