как посчитать сумму арифметической прогрессии на питоне (сумма первых n членов)
Дана арифметическая прогрессия: первый член 2, разность 3. Надо найти сумму первых 10 членов. Я написал через цикл, но не уверен что правильно понял что такое разность, ответ какой-то странный:
a1 = 2
d = 3
summa = 0
for i in range(10):
summa = summa + a1
print(summa) # выдаёт 20, по-моему мало
Похоже я просто 10 раз складываю первый член. Как учитывать разность?
2 ответа
Точно подметил — ты прибавляешь один и тот же a1 десять раз, а член прогрессии должен каждый раз увеличиваться на разность d. В арифметической прогрессии каждый следующий член = предыдущий + d.
Через цикл правильно так:
a1 = 2
d = 3
n = 10
chlen = a1
summa = 0
for i in range(n):
summa += chlen
chlen += d # переходим к следующему члену
print(summa) # 155
Но есть формула, которая считает то же самое сразу, без цикла:
a1, d, n = 2, 3, 10
an = a1 + (n - 1) * d # последний (n-й) член = 2 + 9*3 = 29
summa = (a1 + an) * n / 2 # сумма = (первый + последний) * количество / 2
print(summa) # 155.0
Простыми словами про формулу S = (a1 + an) * n / 2: берёшь полусумму первого и последнего члена (это как бы «средний» член) и умножаешь на их количество. Гаусс в детстве так складывал числа от 1 до 100 — складывал пары с краёв, у каждой одинаковая сумма. Чтобы найти последний член an, прибавляешь к первому разность (n-1) раз: не n, а именно n-1, потому что первый член уже есть и шагов до него ноль.
Если лень выводить an отдельно, можно подставить его прямо в формулу суммы:
a1, d, n = 2, 3, 10
summa = (2*a1 + (n - 1)*d) * n / 2
print(summa) # 155.0
Это та же формула, просто an уже раскрыт как a1 + (n-1)*d. Удобно, когда последний член сам по себе не нужен.