Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm kiếm sự phát triển dự kiến ​​của vi rút sau thời gian t bằng Python

Giả sử có một loại vi rút nguy hiểm và phát triển nhanh chóng. Xác suất số tế bào vi rút phát triển theo hệ số x là 0,5 và xác suất số tế bào vi rút phát triển theo yếu tố y là 0,5. Bây giờ, nếu có một tế bào vi rút lúc đầu, thì hãy tính số lượng tế bào vi rút dự kiến ​​sau thời gian t. Nếu câu trả lời quá lớn, thì kết quả mod là 10 ^ 9 + 7.

Vì vậy, nếu đầu vào là x =2, y =4, t =1, thì đầu ra sẽ là 3, bởi vì ban đầu, virus chỉ có một ô. Sau thời gian x, với xác suất 0,5, kích thước của nó tăng lên gấp đôi (x2) và với xác suất là 0,5, kích thước của nó tăng lên 4 lần. Như vậy, số lượng tế bào vi rút dự kiến ​​sau thời gian t =1 là:0,5 * 2 * 1 + 0,5 * 4 * 1 =3.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • m =10 ^ 9 + 7
  • hệ số:=tầng của (x + y) / 2
  • res:=1
  • while t> 0, do
    • nếu t là số lẻ, thì
      • res:=(res * factor) mod m
    • factor:=(factor * factor) mod m
    • t:=tầng của t / 2
  • trả lại res

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

m=10**9+7
def solve(x, y, t):
   factor=(x+y)//2
   res=1
   while t > 0:
      if t % 2:
         res = (res*factor) % m
      factor = (factor*factor) % m
      t = t// 2

   return res

x = 2
y = 4
t = 1
print(solve(x, y, t))

Đầu vào

2, 4, 1

Đầu ra

3