大數高精度計算庫gmp簡介


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM