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

Avn*_*ner 3 c# factorial

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

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

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

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

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

任何帮助将不胜感激

Jon*_*eet 10

要计算uint.MaxValue你需要大量存储的阶乘.

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

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


Nol*_*rin 6

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

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

由于您似乎认为您不想使用BigInteger类型,如果您可以验证它不是您想要阅读我的回复,然后解释为什么它不适合您的目的将会有所帮助.


Nik*_*hhi 5

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

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