在算术级数中添加数字时,我试图尽可能减少开销。我说的是一个非常大的集合,例如从 1 到 2^128。有什么快速的方法吗?如果是这样,如果不实际使用等差数列和公式,那会是什么?作为参考,从 1 到 2^128 的总和是:
57896044618658097711785492504343953926464851149359812787997104700240680714240
在算术级数中添加数字时,我试图尽可能减少开销。我说的是一个非常大的集合,例如从 1 到 2^128。有什么快速的方法吗?如果是这样,如果不实际使用等差数列和公式,那会是什么?作为参考,从 1 到 2^128 的总和是:
57896044618658097711785492504343953926464851149359812787997104700240680714240
唯一快速的方法是使用公式:
n * (n+1) / 2
任何其他方法(天真地添加)都将花费太长时间!(即使你在超级计算机上有一百万年,你也不会完成计算)。
但是,对于这么大的整数,您不能使用普通整数。您将需要使用一个大整数对象。所以得到一个大整数库,例如。谷歌搜索,https://mattmccutchen.net/bigint/。
注意:256 位整数可能能够将结果保持在该比例附近,但对于 256 位整数是否容易获得以及如何使用它们,这完全取决于平台和编译器。