Сумма этажей в школьной лестнице

тема: Арифметика и формулы (O(1)) · уровень: базовый

Условие

В школе на ремонте решили пронумеровать пролёты лестницы подряд целыми числами: от этажа a до этажа b (включительно). Завхоз хочет быстро узнать, какая получится сумма всех этих номеров.

В больших школах значения могут не помещаться в 32-битный тип (как на олимпиадах), поэтому считайте аккуратно. В Python это не проблема, но в других языках нужно использовать 64-битные целые.

Формат ввода

В одной строке два целых числа a и b.

Формат вывода

Выведите одно целое число — сумму всех целых чисел от a до b включительно.

Ограничения

Пример

Ввод:

-2 3

Вывод:

3

Как решать — идея подхода

Приём: Формула суммы арифметической прогрессии

Ключевое наблюдение: числа от a до b — это арифметическая прогрессия с разностью 1. Значит, сумму можно найти сразу, не складывая все подряд (это было бы слишком медленно при больших промежутках).

Приём работает потому, что у арифметической прогрессии среднее арифметическое первого и последнего равно среднему всех членов. Тогда сумма равна «среднее * количество».

План:

Сложность: O(1) по времени и памяти.

Частая ошибка: написать (a + b) * n // 2 в языке с 32-битным int — произведение может переполниться до деления. Поэтому важно либо использовать 64-битные типы, либо делить на 2 до умножения (как в шаге выше).

Разберись руками

Лестничные пролёты пронумеровали подряд: -2, -1, 0, 1, 2, 3. Нужно быстро сложить все эти номера и получить одну сумму.

Идея: Складывай числа не подряд, а парами «с концов»: первое с последним, второе с предпоследним и так далее. Обычно суммы пар получаются одинаковыми, тогда достаточно знать сумму одной пары и сколько таких пар вышло; если чисел нечётное количество, одно среднее число останется без пары и его нужно добавить отдельно.

Решить задачу с автопроверкой на Python →

Куда дальше