大數高精度計算庫gmp簡介

2022-09-17 02:03:14 字數 1551 閱讀 7939

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 ...