Любопытный ребенок использует программу , которая может факторизовать номер или выражение в следующем виде: p1^e1 * p2^e2 * ... * pn^en
. Экспоненты, равные 1
опущены, например360 = 2^3 * 3^2 * 5
Ребенок вводит этот вывод в программу как новый ввод, но он не понимает ^
знак, поэтому иногда она пропускает один или несколько из тех, которые объединяют соответствующие простую базу и показатель степени. Например(360 =) 2^3 * 3^2 * 5 => 2^3 * 32 * 5 (= 1280)
Из-за этих ошибок она может получить другую факторизацию, которую она может ввести снова (пропуская 0 или более ^
). Она повторяет процесс до тех пор, пока факторизация больше не изменится (возможно, больше нет ^
или она скопировала вывод правильно).
Вы должны написать программу или функцию, которая с помощью целого числа n
( n>1
) выводит все возможные числа в порядке возрастания, чья факторизация может быть той, с которой ребенок (включая n
) закончил . Например, для ввода 16
возможные окончательные факторизации(16 =) 2^4, (24 =) 2^3 * 3, (23*3 =) 3 * 23
Входные данные:
- входное значение на одно целое больше
1
- не будет дано никакого ввода, которое генерирует выходной номер больше чем
2^31-1
- не будет дано никакого ввода, которое генерирует больше чем
1000
выходные числа
Выходные данные:
- список целых чисел в удобной для вашего языка форме
Примеры:
Вход => Выход
11 => 11
16 => 16 24 69
360 => 140 360 770 1035 1219 1280 2875 3680
605 => 560 605 840 2415
2048 => 211 2048
58564 => 230 456 1311 2508 9975 12768 13794 20748 58564 114114 322102
Это код-гольф, поэтому выигрывает самая короткая программа.
Ответы:
CJam - 66
Попробуйте это на http://cjam.aditsu.net/
Объяснение:
(*) Спасибо Мартин
источник
^
может быть удалено за один шаг. Так что58564 = 2^2 * 11^4
это должно быть в состоянии генерировать2508 = 22 * 114
.Руби, 219
Чтобы начать это:
Создает функцию, возвращающую массив чисел.
https://ideone.com/iOMGny
Используйте это так:
Так весело писать все это на мобильном телефоне ...
источник
Perl, 193 байта
Новые строки просто добавлены для удобства чтения.
Цикл for разлагает следующее число (
$x
) на хэш (%f
) простых чисел и степеней. Рекурсивная функция (R
) использует этот хеш для генерации всех чисел, которые могут быть получены путем удаления^
знаков. Эти числа добавляются в очередь (@q
), и процесс повторяется внешним циклом while. Каждый номер в очереди также хранится в уникальном отсортированном массиве (@r
) для печати.источник
Pyth,
464544Попробуй это здесь.
Исправлена множественная
^
ошибка. Например:Обратите внимание, что этот код опирается на несколько исправлений для официального компилятора, которые были выдвинуты после того, как был задан вопрос. Тем не менее, он не использует никаких новых языковых функций.
источник
u
) внутри другого Reduce было невозможно. Я изменил 2 на 3 в соответствующем месте, так что для уменьшения потребуется 3 входа вместо 2. Вот и все.