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.