Ciekawy dziecko wykorzystuje program, który może na czynniki liczbę lub wyrażenie do następującej postaci: p1^e1 * p2^e2 * ... * pn^en
. Wykładniki równe 1
są pomijane np360 = 2^3 * 3^2 * 5
Dziecko wpisuje te dane wyjściowe do programu jako nowe dane wejściowe, ale nie rozumie ^
znaku, więc czasami pomija jedną lub więcej z tych, które łączą odpowiednią bazę pierwszą i wykładnik. Na przykład(360 =) 2^3 * 3^2 * 5 => 2^3 * 32 * 5 (= 1280)
Z powodu tych błędów może otrzymać inną faktoryzację, którą może wprowadzić ponownie (pomijając 0 lub więcej ^
). Powtarza ten proces, dopóki faktoryzacja już się nie zmieni (być może już go nie ma ^
lub poprawnie skopiowała dane wyjściowe).
Powinieneś napisać program lub funkcję, która podając liczbę całkowitą n
( n>1
) wypisuje wszystkie możliwe liczby w kolejności rosnącej, których faktoryzacją może być ta, z którą skończyło się dziecko (w tym n
). Np. Dla danych wejściowych 16
możliwe są ostateczne faktoryzacje(16 =) 2^4, (24 =) 2^3 * 3, (23*3 =) 3 * 23
Dane wejściowe:
- wejście jest jedną liczbą całkowitą większą niż
1
- nie zostaną podane dane wejściowe, które wygenerują liczbę wyjściową większą niż
2^31-1
- nie zostaną podane dane wejściowe, które generują więcej niż
1000
liczby wyjściowe
Dane wyjściowe:
- lista liczb całkowitych w wygodnej formie dla twojego języka
Przykłady:
Dane wejściowe => Dane wyjściowe
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
To jest golf golfowy, więc wygrywa najkrótszy program.
Odpowiedzi:
CJam - 66
Wypróbuj na http://cjam.aditsu.net/
Wyjaśnienie:
(*) Dzięki Martin
źródło
^
może być usunięta w jednym kroku. Dlatego58564 = 2^2 * 11^4
powinien móc generować2508 = 22 * 114
.Ruby, 219
Aby rozpocząć to:
Tworzy funkcję zwracającą tablicę liczb.
https://ideone.com/iOMGny
Użyj tego w ten sposób:
Tyle radości, pisząc to wszystko na telefonie komórkowym ...
źródło
Perl, 193 bajtów
Nowe linie zostały właśnie dodane dla czytelności.
Pętla for rozkłada następną liczbę (
$x
) na hasz (%f
) liczb pierwszych i potęg. Funkcja rekurencyjna (R
) używa tego skrótu do generowania wszystkich liczb, które można uzyskać poprzez usunięcie^
znaków. Liczby te są dodawane do kolejki (@q
), a proces jest powtarzany przez zewnętrzną pętlę while. Każda liczba z kolejki jest również przechowywana w unikalnej, posortowanej tablicy (@r
) do drukowania.źródło
Pyth,
464544Wypróbuj tutaj.
Naprawiono wielokrotny
^
błąd. Na przykład:Zauważ, że ten kod opiera się na kilku poprawkach błędów w oficjalnym kompilatorze, które zostały wypchnięte po zadaniu pytania. Jednak nie korzysta z żadnych nowych funkcji językowych.
źródło
u
) w innej redukcji nie było możliwe. Zmieniłem 2 na 3 w odpowiedniej lokalizacji, aby redukcja wymagała 3 danych wejściowych zamiast 2. To wszystko.