【GMP 高精度计算库】GMP手册学习

使用GMP变量之前,需要先初始化,使用完毕要释放变量。初始化和释放是通过专门的函数调用完成的。一个变量只需要初始化一次,如果非要多次初始化,在每次初始化操作之间释放变量。初始化后的变量可以进行任意次赋值。
一般在函数的开头初始化变量,函数末尾释放变量;为了效率,应避免过多的变量初始化和释放操作。

整数函数:进行有符号整数运算,对应mpz_t类型,函数名一律以mpz_为前缀

    1、初始化

     void mpz_init(mpz_t x) 初始化x并设其初值为0

      void mpz_inits(mpz_t x, ...) 初始化参数列表中的变量,初值设为0. 最后一个参数用NULL,表示结束

      void mpz_clear(mpz_t x) 释放变量

      void mpz_clears(mpz_t x, ...) 释放变量,最后一个参数用NULL;

  2、赋值

void mpz_set(mpz_t x, const mpz_t op)

void mpz_set_q(mpz_t x, const mpq_t op)

void mpz_set_f(mpz_t x, const mpf_t op)

void mpz_set_ui(mpz_t x, const unsigned long op)

void mpz_set_si(mpz_t x, const signed long op)

void mpz_set_d(mpz_t x, const double op)

int mpz_set_str(mpz_t x, const char *  s, int base)

把字符串代表的整数值赋值给x,忽略字符串中的空白字符。base的取值范围是 2~62。如果字符串是有效的数字,函数返回0,否则函数返回-1.当base取值为0时,根据字符串的前缀确定基数:0x和0X代表16进制、0代表八进制、0b和0B表示二进制、否则就是十进制;当base <= 36 时,英文字符不区分大小写;当 37 <= base && base <=62 时,大写字母代表10~35之间的数,小写字母代表61~61;

  3、数值计算

void mpz_add(mpz_t rop, mpz_t x, mpz_t y) // x+y ⇒ rop

void mpz_sub(mpz_t rop, mpz_t x, mpz_t y) // x-y ⇒ rop

void mpz_mul(mpz_t rop, mpz_t x, mpz_t y) // x*y ⇒ rop

void mpz_neg(mpz_t rop, mpz_t op) // -op ⇒ rop

void mpz_abs(mpt_t rop, mpz_t op) // |op| ⇒ rop

void mpz_cdiv_q(mpz_t q, mpz_t n, mpz_t d)//求商

void mpz_cdiv_r(mpz_t r, mpz_t n, mpz_t d) //取余

void mpz_cdiv_qr(mpz_t q, mpz_t r, mpz_t n, mpz_t d)//同时计算商和余数 

4、代码(求两数和)

#include <stdio.h>
#include <gmp.h>
using namespace std;

int main()
{
    mpz_t a,b,c;
    mpz_inits(a,b,c,0,NULL);//等价mpz_inits(a);mpz_inits(b);mpz_inits(c);初始化变量为0
    gmp_scanf("%Zd%Zd",a,b);
    mpz_add(c,a,b);
    gmp_printf("c = %Zd",c);
    return 0;
}

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值