在c#中使用非常大的整数

有没有人知道我可以用c#计算非常大的整数的方法

我试图计算数字的阶乘,例如

5! = 5 * 4 * 3 * 2 * 1 = 120

使用小数字这不是问题,但是尝试计算unsigned int的bigest值的阶乘,这似乎是4,294,967,295,这似乎是不可能的。

我已经查看了BigInteger类但它似乎没有做我需要的东西

任何帮助将不胜感激

4294967295! = 10 ^(10 ^ 10.597)~10 ^(40000000000)这个值需要大约40 Gb的RAM来存储,即使你会发现C#的任何BigInteger实现!

PS嗯,优化存储,让我们说4个字节的9位数,它需要~18 Gb的RAM。

要计算uint.MaxValue的阶乘,你需要大量的存储空间。

例如, 维基百科的文章为8.2639316883 ……×10 ^ 5,565,708。 你将获得疯狂的信息。

强烈怀疑你没有找到任何方法在一个理智的计算机上计算它在一个明智的时间。 你为什么需要这个价值? Stirling的近似值是否足够接近?

首先,值得指出的是uint.MaxValue的阶乘是天文数字大。 我无法找到其阶乘的数量级的良好估计,但它的位表示可能占据标准RAM的高百分比,如果不是很好的话。

BigInteger类似乎是你想要的,只要你想要达到大约1,000,000左右(非常粗略)。 在那之后,时间和记忆变得非常令人望而却步。 在.NET的当前(稳定)版本(最多3.5)中,您必须使用自定义实现。 CodeProject上的这个似乎被高度评价。 如果您正在为.NET 4.0开发,Microsoft团队终于开始在BCL的System.Numerics命名空间中包含一个BigInteger类。 与一些BigInteger实现不同,.NET 4.0中存在的实现没有内置的阶乘方法(我不确定CodeProject方法),但实现一个应该是微不足道的 – 扩展方法会很好办法。

由于您似乎认为您不想使用BigInteger类型,因此如果您可以validation它不是您想要阅读我的回复,那么将会有所帮助,然后确切地解释为什么它不适合您的目的。

为什么你认为你需要计算这些因子? 对于任何进行实际计算的事情来说,这并非实用。

只计算因子(2 ^ 32-1)的结果将占用大量空间,大约16 GB。

计算本身当然会花费很多时间。 如果您构建程序以便可以将计算过程转移到更快的硬件,那么您应该能够在生命周期内获得结果。

如果它是你想要解决的欧拉问题,可以考虑通过消除你实际上没有必要计算的东西以获得答案来找到许多解决方案。

您现在可以使用J#库中的BigInteger类。 这是一篇关于如何做的文章 。 它使部署更难,因为你必须发送J#可再发行组件 。 您还可以考虑使用VS2010 beta,因为Framework 4.0将具有BigInteger 。

如果您安装了J#redist,另一种方法是使用java.math.BigInteger添加对vjslib程序集的引用。

尝试使用数组执行此任务。 你可以使用长整数,因为你有可用的内存空间。 数组的每个成员都代表一个十进制数字。 您唯一需要的是实现多重化。

如果您正在使用像组合这样的因子进行计算,例如,您很少需要一直向下乘以1(例如98 * 98 * 97,因为其他一切都取消了)。

在这里 。 最快的一个,直接来自Factorial Man – Peter Luschny。