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 #include#include
using
namespace
std;
intmain()
編譯:
$g++ test.cpp -o test -lgmp -lgmpxx結果:
輸入兩個數,得到c為2數之和。
附錄:一篇高質量應用gmp的文章:
大數,高精度計算 大數加法
大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。思路很常規。先用字...
大數,高精度計算 大數減法
一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。大數減法的處理思路和加法差不多。先判斷a,b兩數的大小,然後按條件進行逐位計算,並且處理借位。此時借位的條件是某位的值小於0,則往前借位。思路很常規,也不難,直接上 水平有限,現在只能寫出...
高精度計算(大數乘除法)
在高精度加減運算的基礎上實現,進行高精度數的乘法運算,首先要確定積的位數,設兩個數為,a,b la為a 的位數,lb為b的位數,兩個的乘積最少位數為la lb 1 若乘後,的這個最小位上有進製,則乘積位數變為la lb 進行高精度 的乘法時,需要計算被乘數與乘數的每位數字的乘積,其中a i b j ...