zoukankan      html  css  js  c++  java
  • 大数高精度计算库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
    ", 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
    ",c);
            return 0;
    }

    编译:

    $g++ test.cpp -o test -lgmp -lgmpxx结果: 

    输入两个数,得到c为2数之和。

    附录:一篇高质量应用gmp的文章:https://www.cnblogs.com/y3w3l/p/5947450.html

  • 相关阅读:
    面向使用的软件设计随笔13
    面向使用的软件设计随笔12
    面向使用的软件设计随笔11
    面向使用的软件设计随笔10
    面向使用的软件设计随笔09
    面向使用的软件设计随笔08
    面向使用的软件设计随笔07
    Tensorflow入门----占位符、常量和Session
    关于卷积
    tensorflow学习笔记
  • 原文地址:https://www.cnblogs.com/litifeng/p/10492536.html
Copyright © 2011-2022 走看看