GMP库基本使用
准备工作:
先编译好gmp库,make工作估计要花费1-3分钟,如果没有长时间的编译活动请去其他博客查找哪里出了问题。
编译好之后应该有如下效果:
根目录/usr/local/include 下应当有gmp.h,如果附加上c++编译应当有gmpxx.h。
安装的gmp库文件夹(默认是"gmp-版本号"的格式)下有include和lib文件夹。
写代码想要调用gmp.h的话,有三个办法:
一、在.bashrc中添加环境变量:
在用户~/目录下打开.bashrc文件,加入:
具体文件夹位置要以自己为准。Ctrl+H 查看文件夹下隐藏文件。
但是问题是,我试了这种方法好像没啥用。。。
二、include调用时使用详细的地址:
Linux中头文件都默认放到了“/usr/include/”目录下,我们调用时加上详细地址:
三、编译时使用动态链接库-lgmp
编译命令如下:
这样就可直接写成 #include <gmp.h>
gmp库使用
mpz是高精度整数(multiple precision integer),z是整数集的那个。
mpq是高精度分数(multiple precision fraction),q的含义是quotient(商)。
mpf是高精度浮点数,f的含义是float,由一个任意精度的尾数(mantissa)和一个极限精度的指数(limited precision exponent)构成。
mpq与mpf的区别: mpq可以精确表示浮点数表示不了的分数,比如1/3;mpf则可以表示分数表示不了的无理数。
整数函数以 mpz_ 为前缀,对应的是 mpz_t 类型。
有理数函数以 mpq_ 为前缀,对应于 mpq_t 类型。
浮点数函数以 mpf_ 为前缀,对应于 mpf_t 类型。
下面是函数详解:
1. 定义一个长整数(变量名实际为长整数的地址):
2. 初始化,不初始化一个长整数就使用会运行时段错误。
3. 释放操作:
4. 赋值操作:
可以把初始化和赋值连在一起更方便,这个更常用:
set是赋值给大整数,get就是大整数转换为一般的C语言数据类型,但要小心溢出:
5. mpz_计算:
还可以大整数和普通类型混合运算:
gmp库支持计算函数中变量重复,例如 mpz_mul(C,C,C); 就会将C平方的值赋给C,并不会报错。
6. 交换两个大整数:
7. 幂函数:
8. gmp中对变量的操作是使用指针,因此不要对变量进行copy!
GMP默认使用malloc系列函数进行内存分配。
例如我们想写一个函数,返回值不能设为mpz_t,也不用取地址,直接用mpz_t定义形参即可。
不定期更新qwq ————2023.03.20
__EOF__

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)