• 大数高精度计算库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

  • 相关阅读:
    微信小程序基础学习笔记
    Redis基础知识
    JVM热加载class文件(findLoadedClass)
    FLUSH TABLE WITH READ LOCK详解(转载)
    PostgreSQL前世今生(转载)
    MySQL中CREATE DATABASE和CREATE SCHEMA区别(转载)
    如何学习iOS开发
    iOS 去掉高光显示
    Cloud computing open source industry conference
    Intelligent Manufacturing Industry Forum
  • 原文地址:https://www.cnblogs.com/litifeng/p/10492536.html
Copyright © 2020-2023  润新知