Такую задачу дают в седьмом классе на проверку усвоения материала, а ещё — на собеседованиях в ИТ-компании, чтобы проверить находчивость соискателей. Её обычно или решают за пару минут без калькулятора, или тратят на это полчаса, или пишут код, который всё посчитает сам.
Теперь задача — найти значение суммы и разности квадратов от 1 до 100:
1² − 2² + 3² − 4² + 5² − 6² + … + 99² − 100² = ?
Решение с математикой
Очевидно, что можно посчитать значение каждого квадрата, а потом вычитать и складывать все значения по очереди. Но это долго и так собеседование мы точно не пройдём.
Используем математическую хитрость и посмотрим на пример с точки зрения разности квадратов. Для начала расставим скобки:
(1² − 2²) + (3² − 4²) + (5² − 6²) + … + (99² − 100²)
Мы никак не изменили значение выражения, но у нас появилась сгруппированная разность квадратов. Вспомним формулу разности квадратов:
x² − y² = (x − y)(x + y)
Применим её к каждому выражению в скобках:
(1 − 2)(1 + 2) + (3 − 4)(3 + 4) + … + (99 − 100)(99 + 100)
В каждой скобке, где есть минус, значение разности равно −1, потому что числа идут по порядку и в каждой паре второе число больше первого на единицу. Получается, что первая скобка в каждом произведении равна −1:
−1(1 + 2) +(−1)(3 + 4) + … + (−1)(99 + 100)
Вынесем общий минус за скобки:
−1 (1 + 2 + 3 + 4 + … + 99 + 100)
Получается, нам нужно найти сумму от 1 до 100 и умножить её на −1. Для этого вспомним такую формулу:
сумма чисел от 1 до N равна произведению N на N+1, поделённого пополам.
В нашем случае сумма от 1 до 100 считается так:
(100 × 101) / 2 = 10100 / 2 = 5050
Умножаем это значение на −1 и получаем общий ответ: −5050
Решение с кодом (если успеете быстро его набрать)
Хитрые программисты могут потратить эту пару минут не на математику, а на организацию простого цикла:
// тут будет результат
var res = 0;
// с помощью этой переменной мы будем чередовать плюс и минус в выражении
var index = 1;
// перебираем числа от 1 до 100 включительно
for (let i = 1; i <= 100; i++) {
// возводим число в квадрат, ставим нужный знак из индекса и добавляем всё к результату
res = res + index * i * i;
// меняем знак для следующего действия
// если индекс был положительный, то после умножения он становится отрицательный — так мы меняем плюс на минус и наоборот
index = index * (-1);
}
// выводим результат
console.log(res)
Запустите код в консоли браузера, чтобы посмотреть результат. А если вы успели напечатать это за 2 минуты и понять, что означает каждая строчка, — приходите в Практикум прокачивать свои знания и получать новую профессию.