【问题标题】:Best bignum library to solve Project Euler problems in C++? [closed]在 C++ 中解决 Project Euler 问题的最佳 bignum 库? [关闭]
【发布时间】:2010-11-06 00:59:03
【问题描述】:

我还是个学生,我觉得 Euler 项目很有趣。

有时问题需要比原始类型更大的计算。我知道你可以实现它,但我懒得这样做,

所以我尝试了几个库,

MAPM :: 性能非常好,但它只提供大浮点数,可以检查它是否为整数。接受输入非常好,但提供输出却很讨厌,并且使用 Visual C++ 2008 express 编译起来就像魔术一样。

bigint :: 很小,但需要对许多部分进行重新设计。使用非常简单,但功率非常有限,与其他相比非常慢。只有大整数。

ttmath :: 迄今为止我尝试过的最漂亮的一个!只需包含一些文件,您就拥有令人难以置信的力量/简单性。像 Visual C++ 2008 express 中的魔术一样编译。它很快,因为它提供了固定长度的数字。它是使用 C++ 中的元编程构建的。我看到的唯一缺点是,数字在运行时的长度不是任意的,但是在编写代码时你可以很容易地拥有 1024K 的数字,

ttmath::UInt<1024 * 1024> reallyHugeUnsignedInteger;

它提供了三种类型:有符号、无符号和浮点数。

我尝试在VC2008 express下编译gmp,但是失败了!我知道它是最好的,但对于初学者来说在 VC2008 express 下编译并不容易,如果你指出一个在 VC 下编译 gmp 的教程,我也很感激。

编辑 :: 如果您知道如何使用 VC 2008 编译 gmp,请向我解释并获得赏金 :)

EITD :: 看来我没有使用正确的术语,所以这里是用于 Windows 的神奇 GMP!适用于 VC 2008 :) MPIR

【问题讨论】:

  • 注意:你可能需要一个 bignum 库来解决一些问题,但大多数欧拉问题并不真正需要它。当您需要找到某个非常大的属性时,通常要真正计算它以找到该属性是非常低效的。通常您需要分析问题并找到更好的解决方案。例如,如果您需要找出 1000! 中零的个数,计算 1000! 的实际值!将是一个非常低效的解决方案。
  • 好点,但我并不总是得到最佳解决方案:)
  • @Igor:如果低效的解决方案在一秒钟内运行并且需要几分钟的时间来编写,我对高效的解决方案不感兴趣。是的,我已经做了一些欧拉问题,是的,有些情况下,在问题上抛出 GMP 可以立即解决问题。 1000!小于 10 000 个二进制数字,在 PC 上计算可能相当简单。它肯定比计算 1000 中尾随零的数量要快!手工(虽然,当然,这也不是那么棘手)。
  • 好点伊戈尔和史蒂夫!您的 cmets 相得益彰。

标签: c++ bignum


【解决方案1】:

这里有几个关于 GMP 和 Visual Studio 2008 的链接:

GMP Install Help at CodeGuru

GMP Compile Guide at The Edge Of Nowhere(这个看起来很彻底)

【讨论】:

    【解决方案2】:

    ...或者试试 PARI/GP http://pari.math.u-bordeaux.fr/

    【讨论】:

      【解决方案3】:

      GMP。简单的 API,一直存在。

      编辑:哦,你试过了。我真的会再试一次,这是最好的。

      【讨论】:

      • 正如我所说,我从来没有让它在 VC 下工作:(
      • 建议:为了其他SO读者的利益,下次请加链接。我现在正在为你做。
      猜你喜欢
      • 2023-02-13
      • 1970-01-01
      • 2022-11-29
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多