Любопытный ребенок использует программу , которая может факторизовать номер или выражение в следующем виде: 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
Это код-гольф, поэтому выигрывает самая короткая программа.