При буквальном условии «кратны 3, 5 и 7» нужны кратные НОК(3,5,7)=105. Их сумму можно получить формулой арифметической прогрессии без перебора.
Суммирование чисел, делящихся на 3, 5 и 7
При буквальном условии «кратны 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, не считая пересечения несколько раз.