Задача
Найти сумму целых чисел на промежутке от $a$ до $b$.
Входные данные
Два целых числа $a$ и $b$, по модулю не превышающих $10^9$.
Выходные данные
Сумма целых чисел на промежутке от $a$ до $b$.
Тесты
Входные данные | Выходные данные |
2 5 | 14 |
249 318 | 19845 |
23 69 | 2162 |
124 200 | 12474 |
478 653 | 99528 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); PrintWriter out = new PrintWriter(System.out); long a = in.nextLong(); long b = in.nextLong(); long n, S; n = b - a + 1; S = (a + b) * n / 2; out.print(S); out.flush(); } } |
Решение
Для того, что бы найти ответ, нам необходимо знание формул прогрессии, так как решением данной задачи является сумма $n$ первых членов арифметической прогрессии. Вычислить её можно по формуле $\displaystyle S_n = \frac{a_1 + a_n}{2} \cdot n$, где $a_1$ — это a из входного потока, а $a_n$ — это b . Тем не менее, мы все ещё не можем применить вышеприведенную формулу, так как нам неизвестно $n$. Выведем же его из формулы $n$-ого члена арифметической прогрессии: $a_n = a_1 + d \cdot (n-1)$, где $d$ — это разность арифметической прогрессии, которая по условию (хоть и негласно) равна единице. Зная это, из последней формулы выведем, что $n = a_n-a_1 + 1$. Теперь же, когда мы знаем все необходимые значения, остается только подсчитать сумму арифметической прогрессии по ранее данной формуле и подать результат на выход.
Ссылки
Условие задачи на e-olymp
Код решения на Ideone
Решение этой же задачи на C++