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

  • 相关阅读:
    python基础语法_9-2函数式编程
    python基础语法_9-1闭包 装饰器补充
    python基础语法_9-0函数概念
    python基础语法_8循环语句
    python基础语法_7运算符
    python基础语法_3面向对象
    python基础语法_2基本数据类型
    python基础语法_python中的布尔类型详解
    用户需求分析
    结对编程-词频统计(北航暑期软工培训) 郑琪 李泓毅
  • 原文地址:https://www.cnblogs.com/litifeng/p/10492536.html
Copyright © 2011-2022 走看看