สมมติว่าเรามีตัวเลข n พิจารณา x =rand() mod n โดยที่ฟังก์ชัน rand() สร้างจำนวนเต็มระหว่าง 0 ถึง 10^100 (รวมทั้งสองอย่าง) อย่างสม่ำเสมอโดยสุ่ม และ
$$Y =\sqrt{x+\sqrt{x+\sqrt{x+\sqrt{x+...}}}$$
เราต้องหาค่าคาดหวังของ Y ค่าของ n จะอยู่ในช่วง 1 และ 5*10^6
ดังนั้น หากอินพุตเท่ากับ n =5 เอาต์พุตจะเป็น 1.696
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ผิดพลาด:=2235.023971557617
- max_n :=5 * 10^6
- pref :=รายการเริ่มต้นมี 0 ตัวเดียว
- สำหรับ i ในช่วง 1 ถึง 5 * 10^6 ทำ
- แทรก (รายการสุดท้ายของข้อกำหนด + (1 +(4*i + 1)^0.5) * 0.5 ที่ส่วนท้ายของข้อกำหนด
- ถ้า n
- return pref[n - 1] / n
- รวม :=(4 *(n - 1) + 5)^1.5 / 6 - 5^1.5 / 6 - ผิดพลาด
- an :=0.5 + รวม /(2 * n)
- คืนสินค้า
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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