一、編譯安裝,我用的ubuntu18.04html
$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
主要函數:ios
初始化函數:c++
mpz_t a, b, c; mpz_init(a); mpz_init_set_str(b, "2000000000000000000000000000", 10); mpz_init_set_str(c, "3000000000000000000000000000", 10);
輸出函數:ubuntu
gmp_printf("%Zd\n", b);
加法,減法,乘法:函數
mpz_add(a, b, c);
mpz_sub(a, b, c);
mpz_mul(a, b, c);
除法:ui
/*求商,向上取整*/ 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);
比較:spa
/*b大於c,返回1;b等於c,返回0;b小於c,返回-1*/ mpz_cmp(b, c);
求平方根:code
/*結果向下取整*/ mpz_sqrt(a, b);
最大公約數:htm
mpz_gcd(a, b, c);
mpz_perfect_power_p(b);
冪運算:blog
mpz_pow_ui(a, b, 10);
二、例子:
#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