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

  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/litifeng/p/10492536.html
Copyright © 2011-2022 走看看