2010-11-24 53 views
3

我正在使用前26个素数的乘积。这需要超过52位的精度,我相信这是双倍可以处理的最大值,并且超过了十进制可以提供的28-29位有效数字。那么,对数字进行乘法和除法的策略是什么呢?使用大于最大十进制值的数字

此外,为了实现这一目标,我将不得不跳过什么样的箍环?

第22张素数(最让我可以在我的计算器一起乘而不落入科学模式)的产品是:

10,642,978,845,819,148,849,204,664,294,430 

过去四年的产品是

72,370,439 

当乘以一起时,我得到:

7.7023705133964511682328635583552e+38 

性能影响a在这里尤其重要,因为我们基本上试图解决质数字符串比较解决方案在实践中是否比直接比较字符更快的问题。促使此次调查的帖子是here。处理器针对浮点计算进行了优化;理想情况下,我想在任何解决方案中充分利用优化。

TIA!
James

PS:我确实有的代码是针对竞争解决方案的;我不认为素数解决方案可能会更快,但我试图给它一个最公平的机会。

回答

6

您可以在C#4.0中使用BigInteger。对于旧版本,我认为你需要一个开源的库,如this one

+0

我可以在4.0中做到这一点,我还没有玩过它,但那将是完美的。你链接到的图书馆是非常令人印象深刻的......我很惊讶它自2002年以来没有更新,但可能没有需要。我会检查来源。非常好! – 2010-11-24 20:02:13

+0

@James:给定的链接只是一个例子,告诉你在开源网站中有很多优秀的开源库。下次你需要一些图书馆时,试着找到一个。 – 2010-11-25 02:16:56

0

我读了你链接到的帖子,关于面试问题。既然你只是将这些大整数相乘并划分,那么优化就是让它们保持素数分解的形式。每个大整数是一个数组[0..25]的整数,每个元素表示分解中第n个素数的指数。要以这种形式乘以两个大整数,只需逐个添加指数;除以指数。

但你会看到这相当于在两个字符串上列表字符计数。

相关问题