Python程序,用于查找给定方程在随机数下的期望值


假设我们有一个数字 n。考虑 x = rand() mod n,其中 rand() 函数随机生成 0 到 10^100(包括 0 和 10^100)之间的整数。并且

$$Y = \sqrt{x+\sqrt{x+\sqrt{x+\sqrt{x+...}}}}$$

我们需要找到 Y 的期望值。n 的值将在 1 和 5*10^6 之间。

所以,如果输入是 n = 5,那么输出将是 1.696

为了解决这个问题,我们将遵循以下步骤 -

  • err := 2235.023971557617
  • max_n := 5 * 10^6
  • pref := 一个最初包含单个 0 的列表
  • 对于 i 从 1 到 5 * 10^6,执行以下操作
    • 在 pref 的末尾插入 (pref 的最后一个元素 + (1 +(4*i + 1)^0.5) * 0.5)
  • 如果 n < max_n,则
    • 返回 pref[n - 1] / n
  • 否则,
    • total :=(4 *(n - 1) + 5)^1.5 / 6 - 5^1.5 / 6 - err
    • ans := 0.5 + total /(2 * n)
    • 返回 ans

示例

让我们看看下面的实现来更好地理解 -

def solve(n):
   err = 2235.023971557617
   max_n = 5 * 10**6

   pref = [0]
   for i in range(1, 5 * 10**6):
      pref.append(pref[-1] + (1 + (4 * i + 1)**0.5) * 0.5)

   if n < max_n:
      return pref[n - 1] / n
   else:
      total = (4 * (n - 1) + 5)**1.5 / 6 - 5**1.5 / 6 - err
      ans = 0.5 + total / (2 * n)
      return ans

n = 5
print(solve(n))

输入

5

输出

1.69647248786

更新于: 2021年10月11日

239 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.