Школьная задача, которую дети решают без калькулятора, а взрослые — нет
easy

Школьная задача, которую дети решают без калькулятора, а взрослые — нет

А вы сможете?

Такую задачу дают в седьмом классе на проверку усвоения материала, а ещё — на собеседованиях в ИТ-компании, чтобы проверить находчивость соискателей. Её обычно или решают за пару минут без калькулятора, или тратят на это полчаса, или пишут код, который всё посчитает сам. 

Теперь задача — найти значение суммы и разности квадратов от 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 минуты и понять, что означает каждая строчка, — приходите в Практикум прокачивать свои знания и получать новую профессию.

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy