【问题标题】:How to calculate mod of log(n) for large values of n如何为较大的 n 计算 log(n) 的 mod
【发布时间】:2013-08-10 11:18:14
【问题描述】:

我必须解决 C++ 中的一个问题,其中我必须计算形成为 10^n 的数字的模数。但问题是 n 是一个浮点数,所以如果我将 10^n 计算为 pow(10.0, n) 那么它可能会溢出。所以我正在寻找一种可以计算 10^n mod m 而没有任何溢出问题的解决方案。我一般用Python,很简单,不知道用C++怎么解决。

【问题讨论】:

  • 没有为浮点数定义模数:如果指数是浮点数,那么表达式X^e 可能会导致浮点数。
  • log(n) != 10^n... 你的意思是 exp(n) 吗?
  • 我的错误,我已经编辑了问题。如果给出 n = log(num) 那么我想找到 10^n % m,其中 n 可能是一个浮点数。
  • Can't use modulus on doubles? 的可能重复项
  • 10^7.5 大约是 31622776.601683793319988935444327 使用这个 mod 6 时你想要什么答案?

标签: c++ algorithm math computer-science


【解决方案1】:

rounding 首先将小于 1 的数字存储在浮点变量中(您将通过从原始浮点数中减去舍入变量来获得它们)然后对舍入值进行取模。然后将浮点变量相加

这会解决您的问题吗?

编辑(见评论和更好看;-))

 10^7.4 = 25118864.315[...]
 --> round = 25118864,
     float = 0.315,
     round % 6 = 2,

 --> (10^7.4)%6 = 2 + 0.315 = 2.315

因为 calc at windows 会给你

【讨论】:

  • 考虑这一点,例如10^7.4 mod 6。所以浮点值为 0.6,舍入值为 7。10^7 mod 6 给出 4,如果我们添加浮点值,则为 4.6。正确答案是 2.315。
  • 为了更好地理解... 10^7.4 = 25118864.315[...] --> round = 25118864, float = 0.315, round % 6 = 2, (10^7.4)%6 = 2 + 0.315 = 2.315 这是 calc at windows 会给你的
  • 但正如我在问题中提到的,n 可能很大,所以如果我在 C++ 中执行它,它可能会溢出。我将如何处理这种情况?
  • 通常为了防止溢出,您在数字中使用 log()。你可以实现一个 if 大于 10^5 左右,然后在回合前使用 log(),......但困难在于实现模数正确转换为 log
  • 是的,如果您查看我编辑的历史记录,我就是这样开始我的问题的。仍在寻找答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2014-03-30
相关资源
最近更新 更多