Учитывая положительное целое число n> 1, определите, сколько чисел можно сделать, добавив целые числа больше 1, произведение которых равно n . Например, если n = 24, мы можем выразить n как произведение следующими способами
24 = 24 -> 24 = 24
24 = 12 * 2 -> 12 + 2 = 14
24 = 6 * 2 * 2 -> 6 + 2 + 2 = 10
24 = 6 * 4 -> 6 + 4 = 10
24 = 3 * 2 * 2 * 2 -> 3 + 2 + 2 + 2 = 9
24 = 3 * 4 * 2 -> 3 + 4 + 2 = 9
24 = 3 * 8 -> 3 + 8 = 11
Таким образом мы можем получить следующие числа:
24, 14, 11, 10, 9
Это всего 5 чисел, поэтому наш результат - 5.
задача
Напишите программу или функцию, которая принимает n в качестве входных данных и возвращает количество результатов, которые можно получить таким образом.
Это вопрос по коду-гольфу, поэтому ответы будут оцениваться в байтах, при этом меньшее количество байтов будет лучше.
2,2,3,3 -> 10
,2,6,3 -> 11
,2,2,9 -> 13
,12,3 -> 15
,2,18 -> 20
,36 -> 36
(2*3)+(2*3)=12
должно быть в списке тоже.Ответы:
Брахилог , 8 байт
Попробуйте онлайн!
объяснение
Я не совсем уверен, почему создаются
~×
только списки с элементами выше 1, но, похоже, это так, и это прекрасно работает в этой задаче.источник
Gaia ,
91413 байтИсправлена ошибка стоимостью 5 байтов благодаря Джонатану Аллану, а затем 1 байту в гольфе.
Попробуйте онлайн! или попробуйте в качестве набора тестов
объяснение
источник
[6 6]
Желе ,
11 1514 байт+4 байта исправляет ошибку (может быть, лучше?)
-1 байт, нарушая симметрию
Монадическая ссылка, берущая и возвращающая натуральные числа
Попробуйте онлайн! или посмотрите набор тестов
Как?
Обновление ...
источник
Python 2 , 206 байт
Попробуйте онлайн!
объяснение
источник
Mathematica, 110 байт
источник
JavaScript (ES6) 107 байт
Ungolfed:
Тестовые случаи:
Показать фрагмент кода
Чтобы убедиться, что функция вычисляет правильные суммы, мы можем вывести ключи объекта вместо
t
:источник
Python 3 , 251 байт
Попробуйте онлайн!
Дизайн базовый:
разложить n на свои простые множители (простой множитель может появляться несколько раз:)
16 -> [2,2,2,2]
. Это функцияf
.вычислить разделы из списка простых факторов и умножить факторы в каждом разделе. Разделы находятся как в /programming//a/30134039 , и продукты рассчитываются на лету. Это функция
t
.Последняя функция получает продукты каждого раздела n и суммирует их, получая количество различных значений.
Результат для
2310=2*3*5*7*11
есть49
.РЕДАКТИРОВАТЬ : Может быть, нужно исправить, но у меня нет времени, чтобы посмотреть на это сейчас (я спешу). Подсказка: правильный результат для
2310=2*3*5*7*11
? Я так не думаю.РЕДАКТИРОВАТЬ 2 : Огромное исправление. Смотри выше. Предыдущая (глючная) версия была: Попробуйте онлайн!
f
вычисляет факторы (с первым(0, n)
вместо(1, n)
элемента вместо .Лямбда разбивает каждый фактор на «подфакторы» и суммирует эти «подфакторы».
источник