c++ - 在非常大的算术系列中添加数字的最快方法?

标签 c++

在算术级数中添加数字时,我试图尽可能地减少开销。我说的是一个非常大的集合,比如从 1 到 2^128。有什么快速的方法可以做到这一点吗?如果是这样,如果不实际使用等差数列求和公式会怎样?仅供引用,从1到2^128的和为:

57896044618658097711785492504343953926464851149359812787997104700240680714240

最佳答案

唯一快速的方法是使用公式:

n * (n+1) / 2

任何其他方法(天真地添加)都会花费太长时间! (即使你在 super 计算机上有一百万年,你也计算不完)。

但是对于这么大的整数,您不能使用普通整数。您将需要使用一个大整数对象。所以得到一个大整数库,例如。 Google search , https://mattmccutchen.net/bigint/ .

注意:一个 256 位整数可能能够保存该范围内的结果,但它完全依赖于平台和编译器,至于 256 位整数是否随时可用以及它们的使用方式。

关于c++ - 在非常大的算术系列中添加数字的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12255603/

相关文章:

c++ - 数组元素数量

c++ - 避免同时写入 NFS 共享文本文件

c++ - libpcap 和无线信号捕获

c++ - OpenGl表面和纹理

c++ - 可以搜索相同成本的值和键的 map ?对称 map ?

c++ - 如何检查鼠标点击是否在某个区域

c++ - constexpr 唯一标识,使用 clang 编译但不使用 gcc

c++ - QDateTime 与 sqlite3

面向 Objective-C 程序员的 C++

c++ - 如何使用 "new"分配函数内点引用参数的内存