Гид по технологиям

Как найти сумму арифметической прогрессии — формула и примеры на C++, Python, JavaScript и C

4 min read Алгоритмы Обновлено 02 Jan 2026
Сумма арифметической прогрессии — формула и примеры
Сумма арифметической прогрессии — формула и примеры

Иллюстрация арифметической прогрессии

Что такое арифметическая прогрессия?

Сумма конечной арифметической последовательности называется арифметическим рядом (серией). Арифметическая последовательность задаётся так:

a, a+d, a+2d, a+3d, a+4d, ...

где

a = первый член
nd = разность (common difference)

Определение в одну строку: арифметическая прогрессия — последовательность, у которой разность между соседними членами постоянна.

Постановка задачи

Даны первый член a, разность d и количество членов n. Нужно найти сумму первых n членов арифметического ряда.

Пример: a = 1, d = 2, n = 5. Ряд: 1 + 3 + 5 + 7 + 9 = 25.

Итеративный подход (перебор)

Идея: пройти по n членам, накапливая сумму и прибавляя d к текущему члену. Подходит, когда нужно явно сгенерировать члены ряда или когда n невелико.

C++: итерация

// Программа на C++ для суммы арифметического ряда (итерация)
#include 
using namespace std;

// Функция для вычисления суммы арифметической прогрессии
int sumOfArithmeticSeries(int firstTerm, int commonDifference, int noOfTerms)
{
    int result = 0;
    for (int i = 0; i < noOfTerms; i++)
    {
        result = result + firstTerm;
        firstTerm = firstTerm + commonDifference;
    }
    return result;
}

int main()
{
    int firstTerm = 1;
    int commonDifference = 2;
    int noOfTerms = 5;
    cout << "Первый член: " << firstTerm << endl;
    cout << "Разность: " << commonDifference << endl;
    cout << "Количество членов: " << noOfTerms << endl;
    cout << "Сумма ряда: " << sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms) << endl;
    return 0;
}

Вывод:

Первый член: 1
Разность: 2
Количество членов: 5
Сумма ряда: 25

Python: итерация

# Python: сумма арифметической прогрессии (итерация)

def sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms):
    result = 0
    for i in range(noOfTerms):
        result = result + firstTerm
        firstTerm = firstTerm + commonDifference
    return result

firstTerm = 1
commonDifference = 2
noOfTerms = 5
print("Первый член:", firstTerm)
print("Разность:", commonDifference)
print("Количество членов:", noOfTerms)
print("Сумма ряда:", sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms))

Вывод аналогичен: 25

JavaScript: итерация

// JavaScript: сумма арифметической прогрессии (итерация)
function sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms) {
  var result = 0;
  for (let i = 0; i < noOfTerms; i++) {
    result = result + firstTerm;
    firstTerm = firstTerm + commonDifference;
  }
  return result;
}

var firstTerm = 1;
var commonDifference = 2;
var noOfTerms = 5;
document.write("Первый член: " + firstTerm + "
"); document.write("Разность: " + commonDifference + "
"); document.write("Количество членов: " + noOfTerms + "
"); document.write("Сумма ряда: " + sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms));

C: итерация

// C: сумма арифметической прогрессии (итерация)
#include 

int sumOfArithmeticSeries(int firstTerm, int commonDifference, int noOfTerms)
{
    int result = 0;
    for (int i = 0; i < noOfTerms; i++)
    {
        result = result + firstTerm;
        firstTerm = firstTerm + commonDifference;
    }
    return result;
}

int main()
{
    int firstTerm = 1;
    int commonDifference = 2;
    int noOfTerms = 5;
    printf("Первый член: %d\n", firstTerm);
    printf("Разность: %d\n", commonDifference);
    printf("Количество членов: %d\n", noOfTerms);
    printf("Сумма ряда: %d\n", sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms));
    return 0;
}

Вывод равен 25.

Эффективный подход: формула (O(1))

Формула для суммы первых n членов арифметической прогрессии:

S = (n / 2) * (2 * a + (n - 1) * d)

где:

a = первый член
n = количество членов
d = разность

Формула выводится просто: сумма пар первого и последнего, второго и предпоследнего и т.д.

C++: формула

// C++: сумма арифметической прогрессии (формула)
#include 
using namespace std;

int sumOfArithmeticSeries(int firstTerm, int commonDifference, int noOfTerms)
{
    return (noOfTerms / 2) * (2 * firstTerm + (noOfTerms - 1) * commonDifference);
}

int main()
{
    int firstTerm = 1;
    int commonDifference = 2;
    int noOfTerms = 5;
    cout << "Первый член: " << firstTerm << endl;
    cout << "Разность: " << commonDifference << endl;
    cout << "Количество членов: " << noOfTerms << endl;
    cout << "Сумма ряда: " << sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms) << endl;
    return 0;
}

Python: формула

# Python: сумма арифметической прогрессии (формула)

def sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms):
    return (noOfTerms / 2) * (2 * firstTerm + (noOfTerms - 1) * commonDifference)

firstTerm = 1
commonDifference = 2
noOfTerms = 5
print("Сумма ряда:", sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms))

JavaScript: формула

function sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms) {
  return (noOfTerms / 2) * (2 * firstTerm + (noOfTerms - 1) * commonDifference);
}

document.write("Сумма ряда: " + sumOfArithmeticSeries(1, 2, 5));

C: формула

#include 

int sumOfArithmeticSeries(int firstTerm, int commonDifference, int noOfTerms)
{
    return (noOfTerms / 2) * (2 * firstTerm + (noOfTerms - 1) * commonDifference);
}

int main()
{
    int firstTerm = 1;
    int commonDifference = 2;
    int noOfTerms = 5;
    printf("Сумма ряда: %d\n", sumOfArithmeticSeries(firstTerm, commonDifference, noOfTerms));
    return 0;
}

Когда формула может не сработать (практические оговорки)

  • Если n не целое или отрицательное — сначала проверьте корректность входных данных. n должен быть целым и >= 0.
  • Для очень больших n, a или d возможен переполнение целочисленного типа (особенно в C/C++/C). Используйте 64‑битные типы или плавающую арифметику.
  • При нецелых значениях (вещественные a, d) используйте плавающие типы и учитывайте погрешность.
  • Для бесконечных рядов формула не применяется — речь только о конечной сумме первых n членов.

Важно: всегда валидируйте входные данные: n >= 0 и типы достаточной разрядности.

Быстрота и ресурсы — краткая «карточка» (Fact box)

  • Итеративный подход: временная сложность O(n), память O(1).
  • Формула: временная сложность O(1), память O(1).
  • Риски: переполнение для больших чисел; при плавающей арифметике — округления.

Критерии приёмки (тесты / примеры)

Таблица тестовых случаев (вход => ожидаемый):

adnОжидаемая сумма
12525

| 5 | 0 | 10 | 50 (каждый член 5, 10*5) | 10 | -2 | 3 | 24 (10 + 8 + 6) | 0 | 1 | 0 | 0 (нет членов)

Минимальные критерии приёмки:

  • Работает для n = 0 (должно вернуть 0).
  • Корректен для отрицательной d.
  • Обрабатывает большие значения без неожиданного переполнения (или документирует ограничения).

Быстрый план действий (мини‑методология)

  1. Проверить входные данные: n целое и >= 0.
  2. Для простых случаев использовать формулу (O(1)).
  3. Если нужно явно перечислить члены — использовать итерацию.
  4. При больших значениях применить типы с большей разрядностью или контроль переполнения.
  5. Написать набор тестов, включающий граничные случаи.

Чек-листы по ролям

  • Студент:
    • Понять формулу и вывести её от руки на простом примере.
    • Реализовать функцию в выбранном языке.
    • Прогнать тестовые примеры.
  • Разработчик ПО:
    • Защитить функцию от переполнения.
    • Добавить валидацию входных данных.
    • Документировать поведение для вещественных и отрицательных параметров.

Модель принятия решения (когда использовать что)

flowchart TD
  A[Нужно только число S?] -->|Да| B[Использовать формулу O'1']
  A -->|Нет, нужно перечисление| C[Итерация: генерировать члены]
  B --> D[Проверить на переполнение]
  C --> D
  D --> E{Большие числа?}
  E -->|Да| F[Использовать 64-бит или BigInt]
  E -->|Нет| G[ОК]

1‑строчный глоссарий

  • Арифметическая прогрессия: последовательность с постоянной разностью между соседними членами.
  • Ряд/сумма: сумма первых n членов прогрессии.

Краткое резюме

  • Формула S = n/2 * (2a + (n-1)d) даёт O(1) решение для суммы первых n членов.
  • Итерация полезна, если нужно явно получить члены или когда n невелико.
  • Всегда проверяйте вход и учитывайте переполнение/погрешности при вещественных типах.

Спасибо за чтение — с этими приёмами вы сможете быстро и безопасно вычислять суммы арифметических прогрессий в большинстве языков программирования.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Пересылка почты Outlook ↔ Gmail: полное руководство
Почта

Пересылка почты Outlook ↔ Gmail: полное руководство

Как узнать, что пора менять батарейку AirTag
Гаджеты

Как узнать, что пора менять батарейку AirTag

Как удалить устройства из Google Home
Умный дом

Как удалить устройства из Google Home

Вернуть «Open command window here» в Windows 11
Windows

Вернуть «Open command window here» в Windows 11

Подключение Bluetooth-наушников к Wear OS
Гаджеты

Подключение Bluetooth-наушников к Wear OS

Запустить успешную страницу на Patreon
Монетизация

Запустить успешную страницу на Patreon