【发布时间】:2010-11-24 04:42:28
【问题描述】:
我正在处理前 26 个素数的乘积。这需要超过 52 位的精度,我相信这是 double 可以处理的最大值,并且超过了小数可以提供的 28-29 位有效数字。那么对这么大的数字执行乘法和除法的一些策略是什么?
另外,为了实现这一点,我必须跳过任何障碍对性能有何影响?
前 22 个素数的乘积(我可以在计算器上相乘而不会进入科学模式的最多)是:
10,642,978,845,819,148,849,204,664,294,430
最后四个的乘积是
72,370,439
当相乘时,我得到:
7.7023705133964511682328635583552e+38
性能影响在这里尤为重要,因为我们本质上是在尝试解决质数字符串比较解决方案在实践中是否比直接比较字符更快的问题。促使这项调查的帖子是here。处理器针对浮点计算进行了优化;理想情况下,我希望在最终得到的任何解决方案中尽可能多地利用这种优化。
TIA!
詹姆斯
PS:我拥有的代码是用于竞争解决方案的;我不认为素数解决方案可能更快,但我正在努力给它尽可能公平的机会。
【问题讨论】: