Мой номер засвечен с временной регистрацией в студенческом общежитии, которую мне выдавали на 1 год, уже лет 5 как недействительная, и которая абсолютно нигде никому не показывалась. Следовательно, кроме как из базы университета или баз территориальных органов МВД, эту информацию получить было крайне сложно и никому не нужно.
В задаче 4 где-то ошибка, возможно, в ParseInt или при сравнении строк и чисел, не знаю JS. Проверил для одного лишнего числа 10548, где-то на 30 итерации получилось число 17858768886785871. В консоли Хрома это число не присваивается переменной, при присвоении получается 17858768886785872. Возможно, ошибка в этом.
У меня получился ответ 359, вот те 9 лишних чисел в вашем решении: [10548, 10794, 10828, 11538, 11784, 11818, 12528, 12774, 12808].
У меня ровно тот же алгоритм, разве что в 1 пункте для границ [N, M] нет нужды считать все простые числа до верхней границы M, достаточно до sqrt(M) + 1. Ну и словарь простых множителей вместо списка, чтобы не искать каждый раз количество множителей в группе.
Извините, но произведение простого числа k на степень e не дает в результате минимальное число, факториал которого делится без остатка на k^e. Например, 8 = 2^3, m = 2*3 = 6 по вашему алгоритму. Тогда как правильный ответ 4.
Решение второй задачи в лоб для 100к чисел может и приемлимо по времени. Но в моем варианте требовалось, если не ошибаюсь, найти S(630000000, 640000000), и 10кк раз считать факториал неблагодарное занятие. У меня получился такой алгоритм:
Факторизируем число (раскладываем на простые множители)
В получившемся словаре формата {prime: degree}, где prime — простое число, а degree — его степень, проходим по ключам и находим для каждого из них минимальное число n такое, что n! mod prime ^prime = 0
Суммируем результат по всем числам в требуемом диапазоне
У меня получился ответ 359, вот те 9 лишних чисел в вашем решении: [10548, 10794, 10828, 11538, 11784, 11818, 12528, 12774, 12808].
На моем древнем ноуте посчиталось минут за 15.