如何解决如何处理很大的数字并将其存储为C ++中的整数?
对于我的离散结构类,我必须在C ++中计算53 ^ 37(mod 77)。在纸上,我知道这等于4,但是在尝试自己编写代码并四处搜寻之后,我似乎无法使它等于16以外的任何其他值。我认为这是因为53 ^ 37的数字太大而无法商店。
解决方法
以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
。可以对任何初始指数进行递归操作。
我在手机上尝试过计算器。它不会计算。我用PHP尝试过。我有16岁。我对64位Windows 10内置计算器感到厌倦。它给了我“ 4”。我在32位Windows XP的计算器上尝试过。我也得到“ 4”。因此,我猜想C ++数学库无法处理大数目。您可以使用其他数学库。我用Google搜索其他人正在使用的数学库。
其中大多数指向可处理大量数字的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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。