执行非常复杂的BigInteger操作非常慢,例如:
BigInteger.Pow(BigInteger(2),3231233282348);
我想知道是否有任何办法可以对这些基本数学函数进行多线程处理。
执行非常复杂的BigInteger操作非常慢,例如:
BigInteger.Pow(BigInteger(2),3231233282348);
我想知道是否有任何办法可以对这些基本数学函数进行多线程处理。
BigInteger.Pow(BigInteger(2),807808320587);
BigInteger.Pow(BigInteger(2),807808320587);
BigInteger.Pow(BigInteger(2),807808320587);
BigInteger.Pow(BigInteger(2),807808320587);
1*2*3*4...
,而另一个线程可以计算10*11*12
。(是的,阶乘会很快生成大数,但这只是拆分的一个例子)最后,两个结果必须相乘。你也可以让每个线程在需要时获取下一个乘数,以便在它们之间良好地分配工作负载。如果无法拆分,就不幸了。 - ZoolWay的答案是
BigInteger.Pow(BigInteger(2), 3231233282348);
将包含
Log(2)/Log(10) * 3231233282348 == 9.727e11
数字很多,因此需要900 GB来写下答案。这就是为什么它那么慢。
如果您使用的是.NET 4.5版本,请了解异步等待(async await):