Есть ли ошибка в строке

x0 = a, xi = pxx-1 + q, i = 1, 2, 3 ...
Дано положительное челое число n и действительное число a, c, d, p, q.
Найти принадлежит ли число xn интервалу (c, d).

n = int(input("n = "))
a = float(input("a = "))
c = float(input("c = "))
d = float(input("d = "))
p = float(input("p = "))
q = float(input("q = "))
xn = a * p ** n + q * (1 - p ** n) / (1 - p) #Интересует эта строка
print(xn)
if c <= xn <= d:
    print('yes')
else:
    print('no')

Правильно ли будет считать xn, у меня есть какие-то опасения в строке где есть коментарий


Ответы (1 шт):

Автор решения: Zhihar

ну формула то с небольшим дефектом :)

действительно

xn = a * p^n + q * (p^(n - 1) + p^(n-2) + ... + p + 1)

и (p^(n - 1) + p^(n-2) + ... + p + 1) как сумма геометрической прогрессии сворачивается в

(p^n - 1) / (p - 1)

но что делать, когда p = 1?

тогда эта сумма сворачивается в n

Поэтому или учитывайте 2 случая в вычислениях или считайте сумму напрямую, а не через формулу суммы геометрической прогрессии

типа такого:

nx = (a * p**n + q * (1 - p**n) / (1 - p)) if p != 1 else (a * p**n + q * n)
→ Ссылка