图像缩略图

可变精度整数算法

版本1.45(2.86 MB)通过 约翰D'ERRICO
具有完全任意大小整数的算术。支持vpi数的数组和向量。万博1manbetx

16.9K下载

更新2015年1月27日

查看许可证

编辑注意:该文件被选为MATLAB Central挑选本周

每过一段时间,我一直想要做算术与幅度超过了它可以适合MATLAB的标准数据类型大整数。由于我没有象征性的工具箱,简单的解决方案是把它写在MATLAB。我这样做,在这些工具被完全用MATLAB,所以没有必要编译代码。
使用vpi工具,算法很简单。
A=vpi(17)^17
ans =.
827240261886336764177

17+A^17
ans =.
39786732894291535047752038041559739510060813980024082
30012867731573722066105737100731556603857745946047229
53759676529121155309750944582301597489457676380805029
59227566911971103003303064782118652210655457390045806
99039190393572334521701109889855832341416056005878848
49943142324389193616484809157960034059531548585473213
36465170635561696613297503569949729314

还有一些不错的附加组件,例如,一个用于计算大参数或大阶乘的精确二项式系数的工具,或者将具有数千位数字的二进制数转换为十进制(vpi)形式。

例如,在MATLAB现有nchoosek功能被打乱甚至相当小的二项式系数。

nchoosek(100,50)
警告:结果可能不准确。系数大于1.000000e+15
精确到15位。
>在nchoosek在66
ans =.
1.0089e + 29

然而,nchoosek对VPI数字没有这样的问题。

nchoosek(vpi(100),50)
ans =.
100891344545564193334812497256

类似地,阶乘(171)的计算也会导致溢出。虽然我承认有很多好方法可以避免这个问题,但factvpi函数根本没有问题。

阶乘(171)
ans =.
Inf

阶乘(vpi(171))
ans =.
12410180702176678234248405241031039926166055775016931
85388951803611996075221691752992751978120487585576464
95950167038705280988985869071076733124203221848436431
04735778899685482782907545415619648521534683180442932
39598173696899657235903947616152278558180061176365108
428800000000000000000000000000000000000000000

现在有GCD和LCM工具,它们都可以接受两个以上的输入参数。

lcm(vpi(123452356)、1234433265364467)
ans =.
3557547184310976844988

我也把一些工具,可以测试素性。例如,梅森素数:

P = VPI(2)^ 127 - 1
ans =.
170141183460469231731687303715884105727

isprime(p)
ans =.
1

现在已实现vpi数的因数分解。

因子(VPI( '1234567890123456789'))
ans =.
3 3 101 3541 3607 3803 27961

载体或VPI数字阵列现在的工作非常漂亮。

A=vpi(眼睛(3))*3+1
A =
4 1 1
1 4 1
1 1 4

a ^ 17
ans =.
5642305908354 5642176768191 5642176768191
5642176768191 5642305908354 5642176768191
5642176768191 5642176768191 5642305908354

其他工具数十也包括在内。我甚至还包括只是为了好玩一种工具,将一个数转换成它的可读文本版本作为一个大的整数。

vpi2english(VPI( '12000000110022987'))
ans =.
12万亿,1.1亿,22000,987

对于周围的项目Euler解算器,vpi使许多问题易于解决。

附录-Ben Petschel为我提供了在vpi阵列上执行unique和sortrows操作的代码。非常感谢Ben!

引用

约翰D'ERRICO(2021)。可变精度整数算法(//www.tianjin-qmedu.com/matlabcentral/fileexchange/22725-variable-precision-integer-arithmetic),MATLAB中央文件交换。检索到

MATLAB版本兼容性
使用R2007b创建
与任何版本兼容
平台兼容性
窗户 马科斯 Linux.

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始打猎吧!

VariablePrecisionIntegers / HTML /