给佬友们分享点数学小软件

tools.zip (727.4 KB)
网上找的各种小工具,皆出自一人之手,解压密码linux.do,稍后介绍一下用法
再加一个:
PowCalc.zip (2.1 MB)介绍:

HugeCalc 是什么?

HugeCalc 是一款高精度算法库(同时支持 MBCS + UNICODE 版),适合于大规模科学计算,尤其适用于数论、密码学等领域研究,其核心算法耗费作者十余年的心血。具有占用资源少、效率高、使用便捷、易二次开发、可移植性强、可扩展性好等特点。关键文件 HugeCalc.dll 虽然很小,却提供了公共函数接口 709 个(标准C++接口 473 个;标准C接口 236 个),且其计算速度完全可与大型专业数学工具软件媲美!

现已提供了如下功能:

  • 高精度快速加法
  • 高精度快速减法
  • 高精度快速乘法
  • 高精度快速除法
  • 高精度快速同余
  • 高精度快速位运算
  • 高精度快速乘方
  • 高精度快速开方
  • 超大整数快速取对数
  • 高精度快速求排列
  • 高精度快速求组合
  • 高精度快速 n!、n!!、n#、素数阶乘
  • 高精度快速计算 Fibonacci、Lucas 数列
  • 高精度快速乘积取模
  • 高精度快速模逆运算
  • 高精度快速乘方取模(支持负指数)
  • 高精度快速求最大公约数(支持群组运算)
  • 高精度快速计算扩展最大公约数
  • 高精度快速求最小公倍数(支持群组运算)
  • 高精度快速“等幂和”(支持群组运算)
  • 高精度快速任意进制转换
  • 超大整数素性快速检测
  • 生成随机超大(素)整数、快速生成最邻近素数
  • 自由指定有效位运算
  • 强大而灵活的输出
  • 高精度计时器(有暂停、累计、复位等功能)

为了与广大网友分享 HugeCalc 带来的便捷,该版公开了 HugeCalc.dll 的所有接口文件(同时支持 MBCS + UNICODE 版),大家可以更自由地进行高精度计算或自开发,而无须再依赖于 Mathematica 等大型软件。

V5.x 首次采用了十进制/二进制“双进制内核系统”,且内部可高效相互转换,使输入/输出及内部计算均得以高效进行。

V6.x 新增了各种标准导入接口,可方便各种编程语言进行二次开发,如 C++、C、VB、Delphi 等。

V7.x 则实现了自动识别用户 CPU 类型,并自动调整算法及相关参数,以使效率最佳化;并实现了用 SSE2 指令集加速、多核并行处理等新技术,以充分发挥现在及未来 CPU 的性能。

V8.x 则实现了全整型指令算法(无须任何浮点指令集支持),比之先前有浮点指令参与时可提速 30% 左右。

HugeCalc 自网上公开发布以来,得到了广大网友的积极反馈。(当前最新版本为:HugeCalc V8.0.0.0;参见:测试报告
强大的 HugeCalc

HugeCalc 是一款持续发展的软件,它具有如下特点:

  • 功能全面:关键文件 HugeCalc.dll 虽然很小,却提供了公共函数接口 709 个(标准C++接口 473 个;标准C接口 236 个)。重载了多种版本的构造函数,以及重载了许多基本的运算符,并具备灵活的输出方式,使用方便一切得心应手(见头文件:HugeCalc.hHugeInt.hHugeIntX.hRadixConverter.h)。同时精心编配了详尽的帮助文档 HugeCalc.chm;
  • 占用资源少:作者在开发过程中非常注重资源的有效利用,确保内存的耗用尽可能地低,远低于其它高精度算法库(HugeCalc V5.1.0.1 曾在一台工作站上精确计算出5千万的阶乘,耗时654.3秒,内存耗费峰值1105MB;普通程序一般都会因寻址空间不足等原因而中途崩溃);
  • 自动调整算法:HugeCalc 在启动时可自动侦测用户 CPU 的型号,并据此自动调整算法及相应参数,使在兼顾老式机器的前提下,可充分发挥现代及未来 CPU 的功效(如采用 SSE2 指令集、多核并行等);
  • 效率高:这是算法库的根基。HugeCalc 采用了许多先进的算法,部分是作者在该领域多年的积累,许多算法甚至已优于一些大型专业数学工具软件;
  • 双进制内核:一般的算法库,内核要么采用二进制,要么采用十进制。前者便于位操作,后者便于以通常的十进制输出显示;但却无法同时兼具两者之优点。HugeCalc V5.x 首次采用双内核系统,且内部可相互高效转换,使该问题得以完美解决;
  • 使用便捷:灵活的调用方式,可通用于各种编程环境;MBCS、UNICODE 版本合二为一:现仅须一份 HugeCalc.dll 即可;
  • 易二次开发:丰富的数据接口,为再开发提供了便利;
  • 可移植性强:算法库本身基于整数处理,完全不调用任何浮点指令,可适应于各种软硬件平台;
  • 可扩展性好:对开发者来说,良好的数据结构,数以千计的高效内核,改进算法或新增功能都极为容易;对于用户来说,由于采用了合理的标准导出模式,从 V6.x 起,HugeCalc 将保证后续版本完全兼容先前版本;当有新版发布时,先前的程序无须重新编译即可调用升级后的DLL。
    为了让广大网友体验 HugeCalc 的强大便捷,作者特意编写了一系列的 demo & test 程序,如下图所示:
    — 图1
    本计算器仅为 HugeCalc 算法库的 Demo & Test,所以功能不全,界面也不算很理想;但已提供了最常用的一些功能,且非常强大(无论注册 HugeCalc 与否,本程序的运行都无任何限制;更多的介绍请参见帮助文档 HugeCalc.chm 中的相关页面)。

本算法库自在自网上公开发布以来,由于其强大的功能,得到许多网友的积极反馈,也经常会有朋友询问是否可以通过 VB、Delphi 等编程语言来调用它。现在这个问题已经解决,如下图所示:
— 图2
如果要在 0.1s 内计算出C200000_100000(从 200000 个不同元素中抽取 100000 个的组合数),而你最擅长的是 VB,能做到吗?看了上面的图示,答案是:能!在我的机器(AMD 3200+,2.01 GHz,1GB RAM,WinXP SP2)上其实仅用了 0.035865s 而已,这是用 VB 调用 HugeCalc 实现的,我已经将源代码打包进了压缩包,以供网友参考。
这个用 VB 编写的计算器还有个特别功能,可以快速计算大数的“模幂”,若指数为负数,将有模逆运算,这已在程序中用 ToolTip 形式进行了提示。
快速计算阶乘非零尾数

这纯粹是一个数论小游戏:阶乘的十进制结果中末尾都会有很多个数字 0 (5以下的除外),去掉这些连续的 0 之后最后若干位称为“阶乘非零尾数”。给出一个数 N(它可能非常非常大,大到上千万位),请迅速计算出它的阶乘 N! 的最后的指定位的非零尾数。我编写了一个小程序,界面如下:
— 图3
曾有许多竞赛题是让选手编写程序快速计算阶乘的最后一位非零尾数,而本程序则可快速计算最后的 1~255 位非零尾数,功能很强大,速度亦是无与伦比,这些的背后则是算法库 HugeCalc 的强力支持!为了让广大网友体验快速计算的乐趣,无论注册 HugeCalc 与否,本程序的运行都无任何限制!
关于本话题的深入探讨,可访问本站的擂台:计算阶乘的 18 位非零尾数
最直观的 RSA 算法教程(含源代码及程序)

为什么说是“最直观的 RSA 算法教程(含源代码及程序)”呢?请看如下界面:
— 图4
它将 RSA 的原理以数学公式的形式直接反映在界面上,所有的项都可由用户编辑,而在使用时,还会自动判定状态,自动给予提示。更重要的是,还提供了源代码,RSA 被精心设计成两个版本:标准C调用(rsa.h & rsa.c)及标准C++调用(rsa.hpp & rsa.cpp)。

我虽然开发了 HugeCalc,并深信其在密码学领域大有作为,可是我本身之前对密码学却一无所知,于是拼命搜集资料自学。也许我的数论功底还可以,所以学 RSA 还比较轻松。但发现极少程序可以直观地反映其算法的流程,这才决定自己全新开发这款程序,并共享源代码(特别地,无论注册 HugeCalc 与否,RSATool.exe 的运行都无任何限制!)。

17 个赞

?没人用吗

1 个赞

不是,没人说话?

感谢分享 Mark 一下

@1-debtor 来点使用感受捧捧场

正经人谁学习啊兄弟

虽然用不上,但点赞支持

github上传了嘛?对高精度源码感兴趣。主要是这个里面所说的高精度如何衡量,判断不出来,使用场景和日常工作不匹配。

1 个赞

感谢分享

感谢你的分享

有benchmark吗?与业界常用的gmp、mpfr相比有多大优势?
https://gmplib.org/
https://www.mpfr.org/

类似于这个
https://bellard.org/libbf/benchmark.html

附一个wikipedia

1 个赞

啊,我还以为佬要分享小学数学的教学软件呢,结果一看,,有点高端 :joy:

虽然用不到,但mark一下。

感谢分享小巧工具,看着像是VB编写的程序。

我平时喜欢用mathematica,当场一个万能计算器用

在座佬友们都是人手一个gpt,谁还用得上这个……

没有贬低佬友的意思,就是感觉这个软件我不太可能去尝试。

打开这个压缩包发现里面大多数程序都是07年甚至04年的(快比我岁数都大了)而官网的更新日志从07年开始就不再变化了。
程序也并不公开源代码,只给出链接库。官网页面也非常的老派。

主要的感觉就是太古老了,别家的开源产品也不可能这么多年没有改进。如果不必别家快的话,又不公开源代码,那就感觉没有什么学习尝试的必要了。

当然这里的速度问题还是我的臆测,我今天有空的话会尝试跑一跑benchmark对比一下。

====
OK,我收回我之前说的话,我用Msys2自带的GMP库和该软件包提供的一个阶乘计算工具比计算速度。
在 n = 2e7 左右 GMP慢零点几秒
n = 4e7的时候 GMP慢差不多一秒
这个软件还是07年发布的,确实有东西

====
再更新一下,一开始很惊讶。后来发现原来 GMP 只用到单核,而这个程序会调用所有的核心(虽然利用率也不是100%)
PS:另外这个库似乎是要注册(付费) 才能使用那个HugeCalc.exe倒还是免费的。

1 个赞

感谢分享大佬厉害啊

统一回复一下,只是网上找的资源,并非自制,有问题也请找原作者。

数学软件当然要用matlab了 :tieba_009: