1、编译安装,我用的ubuntu18.04
$sudo apt-get install m4 //默认没安装,gmp用这个 $tar -jvxf gmp-6.1.2.tar.bz2 //解压 $cd gmp-6.1.2 $./configure --enable-cxx //开启c++支持 $make $make check //注意必须检测一下,gmp官方特别提醒的 $sudo make install
主要函数:
初始化函数:
mpz_t a, b, c; mpz_init(a); mpz_init_set_str(b, "2000000000000000000000000000", 10); mpz_init_set_str(c, "3000000000000000000000000000", 10);
输出函数:
gmp_printf("%Zd\n", b);
加法,减法,乘法:
mpz_add(a, b, c);
mpz_sub(a, b, c);
mpz_mul(a, b, c);
除法:
/*求商,向上取整*/ mpz_cdiv_q (a, b, c); /*求余数,由于求商是向上取整,所以余数为0或者负数*/ mpz_cdiv_r (a, b, c); /*求商,向下取整*/ mpz_fdiv_q (a, b, c); /*求余数,由于求商是向下取整,所以余数为0或者正数*/ mpz_fdiv_r (a, b, c);
比较:
/*b大于c,返回1;b等于c,返回0;b小于c,返回-1*/ mpz_cmp(b, c);
求平方根:
/*结果向下取整*/ mpz_sqrt(a, b);
最大公约数:
mpz_gcd(a, b, c);
判断是否是一个质数的次幂:
mpz_perfect_power_p(b);
幂运算:
mpz_pow_ui(a, b, 10);
2、例子:
#include <gmpxx.h> #include <iostream> #include <stdio.h> using namespace std; int main() { mpz_t a,b,c; mpz_init(a); mpz_init(b); mpz_init(c); gmp_scanf("%Zd%Zd",a,b); mpz_add(c,a,b); gmp_printf("c= %Zd\n",c); return 0; }
编译:
$g++ test.cpp -o test -lgmp -lgmpxx结果:
输入两个数,得到c为2数之和。
附录:一篇高质量应用gmp的文章:https://www.cnblogs.com/y3w3l/p/5947450.html