【问题标题】:How would I handle calculating a very large number and storing it as an integer in C++? [duplicate]我将如何处理计算一个非常大的数字并将其存储为 C++ 中的整数? [复制]
【发布时间】:2020-10-31 03:20:02
【问题描述】:

对于我的离散结构类,我必须用 C++ 计算 53^37 (mod 77)。在纸上我知道这相当于 4,但是在尝试自己编写代码并四处搜索之后,我似乎无法让它等于 16 以外的任何值。我假设这是因为 53^37 的数字太大了商店。

【问题讨论】:

  • 想想每次乘法时值(mod 77)会发生什么变化。你不需要计算 53^37。
  • 对于任何标准的内置类型,即使在现代 C++ 中,您也无法使用任何基本的整数或整数类型来编译或计算它。对值的操作将导致溢出。您要么需要包含一个“大型 int”库,该库还支持整数的 pow 函数,要么自己编写。

标签: c++ discrete-mathematics


【解决方案1】:

从字面上看,我们可以说 53^37 53*53*53*53*... a total of 37 times。我们可以将其重新排列为53*53 = 2809,然后它将在最后生成2809*2809*2809*... 18 times * a lone 53。然后找到2809 mod 77 = 37,这意味着每次乘法你都会得到37的提醒,我们有18次乘法要做,

37 ^ 18 = 16890053810563300749953435929,然后我们将单独的 53 相乘得到895172851959854939747532104237。

这个数字还是太大所以我们重复这个过程,37 ^ 18 = 1369 ^ 9,我们找到1369 mod 77 = 60,然后是60 ^ 9 * a lone 53 = 534117888000000000,534117888000000000 mod 77 = 4。这可以对任何初始指数递归地完成。

【讨论】:

    【解决方案2】:

    我尝试了手机中的计算器。它不会计算。我用 PHP 试过了。我得到了 16。我厌倦了 64 位 Windows 10 内置计算器。它给了我“4”。我用 32 位 Windows XP 的计算器试了一下。我也得到了“4”。所以,我猜 C++ 数学库不能处理大数字。您可以使用其他数学库。我谷歌看看人们正在使用什么其他数学库。

    他们中的大多数都指向这个可以处理非常大的数字的 GMP 数学库。好久没做C++了。我不确定这是否适合您。不过你可以试一试。

    主站点看起来很糟糕。 https://gmplib.org/

    我认为这个网站有更好的例子。 https://www.cs.colorado.edu/~srirams/courses/csci2824-spr14/gmpTutorial.html

    PHP 网站有很好的例子。 https://www.php.net/manual/en/ref.gmp.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-13
      • 2015-06-30
      • 2021-09-19
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多