在算术级数中添加数字时,我试图尽可能地减少开销。我说的是一个非常大的集合,比如从 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/