Суммирование чисел, делящихся на 3, 5 и 7

При буквальном условии «кратны 3, 5 и 7» нужны кратные НОК(3,5,7)=105. Их сумму можно получить формулой арифметической прогрессии без перебора.

Короткий ответ

Что ответить на собеседовании

При буквальном условии «кратны 3, 5 и 7» нужны кратные НОК(3,5,7)=105. Их сумму можно получить формулой арифметической прогрессии без перебора.

Подробный разбор

Ответ с пояснениями

Условие

Напишите функцию, получающую целое число n и возвращающую сумму всех целых чисел от 1 до n, которые являются кратными 3, 5 и 7.

Ответ

При буквальном условии «кратны 3, 5 и 7» нужны кратные НОК(3,5,7)=105. Их сумму можно получить формулой арифметической прогрессии без перебора.

function sumMultiples(n) {
  if (!Number.isSafeInteger(n) || n < 0) throw new RangeError('Нужно неотрицательное целое');
  const k = BigInt(Math.floor(n / 105));
  return 105n * k * (k + 1n) / 2n;
}

Для n=210 результат 315n: подходят 105 и 210. Возвращается BigInt, чтобы сумма не теряла точность. Если автор имел в виду «кратно хотя бы одному из 3, 5, 7», условие другое: используйте включения-исключения для делителей 3,5,7,15,21,35,105, не считая пересечения несколько раз.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее