大數高精度計算庫gmp簡介

一、編譯安裝,我用的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

相關文章
相關標籤/搜索