C语言实现大数阶乘(考虑性能问题)

请问用C语言如何实现大数阶乘?有大神能提供代码参考吗?不是简单的计算阶乘,还需要考虑性能问题。例如100w阶乘,并行计算
,1分钟内计算完这种

不限语言,如果是8核CPU的情况下,可以使用多线程,并行计算这种,还有社么方法可以提升性能

100万阶乘,如果要做到精确到个位数,其结果大约是一个600万位的数字。这只是最后结果,还不包括中间运算,所以完全不可能做到1分钟计算完
但是,如果你只是计算近似值,有 √(2πn) * (n/e)^n这个公式,那么无论多大,都瞬间可以算出来。

如果不是精确到个位数的话,还是有办法在1分钟之内计算出来的,如果需要精确到个位数,就像前面贵阳老马说的,600万位的计算,神仙也搞不定。
这里给一个思路:
1*2*....*N = 2^(lg2 1+lg2 2+lg2 N)
可以做一个64K的数组,存放lg2 1~lg2 N的数值,每个数组为了精度提升,可以做到64bit(建议采用定点计算的方式,bit0~bit39为小数部分,因为对于65536而言,整数部分不会超过16,保留24位可以做到200万的阶乘求指数和),, 也就是const iong lnVal[65536]
如果数值大于65536,可以通过除以2,4,8等方式,把范围缩放到这个范围内,结果通过插值的方式获取确切的值。

然后对于大数的阶乘,首先计算出其指数的和Sum,然后采用2^Sum的方式,可以计算出你想要的精度的大数阶乘的值。

这样处理,CPU足够快的话,估计几秒就可以计算出你想要的值。
对于精度的估计,按照这种方法做到200万的阶乘,还有2^20的有效数字是准确的;如果想再提升有效数字,可以再加大小数部分的位数,直到达到你想要的效果为止。

https://stackoverflow.com/questions/1384160/calculating-factorial-of-large-numbers-in-c

100的阶乘就相当大了,100w更不用说了,得有专门的处理程序,一般计算机很难应对,估计矿机也勉强应对