← Все вопросы

как посчитать сумму арифметической прогрессии на питоне (сумма первых n членов)

Задан 1 месяц назад1.4к просмотров2 ответа
5

Дана арифметическая прогрессия: первый член 2, разность 3. Надо найти сумму первых 10 членов. Я написал через цикл, но не уверен что правильно понял что такое разность, ответ какой-то странный:

a1 = 2
d = 3
summa = 0
for i in range(10):
    summa = summa + a1
print(summa)  # выдаёт 20, по-моему мало

Похоже я просто 10 раз складываю первый член. Как учитывать разность?

2 ответа

11
✓ Принятый ответ — помог автору

Точно подметил — ты прибавляешь один и тот же 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, потому что первый член уже есть и шагов до него ноль.

3

Если лень выводить an отдельно, можно подставить его прямо в формулу суммы:

a1, d, n = 2, 3, 10
summa = (2*a1 + (n - 1)*d) * n / 2
print(summa)  # 155.0

Это та же формула, просто an уже раскрыт как a1 + (n-1)*d. Удобно, когда последний член сам по себе не нужен.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект