Ein neugieriges Kind verwendet ein Programm , das eine Zahl oder einen Ausdruck in das folgende Formular faktorisieren kann: p1^e1 * p2^e2 * ... * pn^en
. Exponenten gleich 1
sind weggelassen, z360 = 2^3 * 3^2 * 5
Das Kind gibt diese Ausgabe als neue Eingabe in das Programm ein, aber es versteht das ^
Vorzeichen nicht und überspringt manchmal eine oder mehrere derjenigen, die die entsprechende Prim-Basis und den entsprechenden Exponenten verketten. Z.B(360 =) 2^3 * 3^2 * 5 => 2^3 * 32 * 5 (= 1280)
Aufgrund dieser Fehler erhält sie möglicherweise eine andere Faktorisierung, die sie erneut eingeben kann (indem sie 0 oder mehr überspringt ^
). Sie wiederholt den Vorgang, bis sich die Faktorisierung nicht mehr ändert (möglicherweise gibt es keine mehr ^
oder sie hat die Ausgabe korrekt kopiert).
Sie sollten ein Programm oder eine Funktion schreiben, die mit einer Ganzzahl n
( n>1
) alle möglichen Zahlen in aufsteigender Reihenfolge ausgibt, deren Faktorisierung diejenige sein könnte, mit der das Kind endete (einschließlich n
). ZB für die Eingabe sind 16
die möglichen endgültigen Faktorisierungen(16 =) 2^4, (24 =) 2^3 * 3, (23*3 =) 3 * 23
Eingabedetails:
- Eingabe ist eine einzelne Ganzzahl größer als
1
- Es werden keine Eingaben gemacht, die eine Ausgabenummer größer als erzeugen
2^31-1
- Es werden keine Eingaben gemacht, die mehr als
1000
Ausgabenummern erzeugen
Ausgabedetails:
- eine Liste von Ganzzahlen in einer für Ihre Sprache geeigneten Form
Beispiele:
Eingabe => Ausgabe
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
Dies ist Code-Golf, also gewinnt das kürzeste Programm.
Antworten:
CJam - 66
Versuchen Sie es unter http://cjam.aditsu.net/
Erläuterung:
(*) Danke Martin
quelle
^
können in einem Schritt entfernt werden. Also dafür58564 = 2^2 * 11^4
sollte man generieren können2508 = 22 * 114
.Ruby, 219
So fangen Sie an:
Erstellt eine Funktion, die ein Array von Zahlen zurückgibt.
https://ideone.com/iOMGny
Benutze es so:
So viel Spaß dies alles auf einem Handy zu schreiben ...
quelle
Perl, 193 Bytes
Zeilenumbrüche werden nur zur besseren Lesbarkeit hinzugefügt.
Die for-Schleife zerlegt die nächste Zahl (
$x
) in einen Hash (%f
) von Primzahlen und Potenzen. Die rekursive Funktion (R
) verwendet diesen Hash, um alle Zahlen zu generieren, die durch Entfernen von^
Zeichen erreicht werden könnten . Diese Nummern werden zu einer Warteschlange (@q
) hinzugefügt , und der Vorgang wird von der äußeren while-Schleife wiederholt. Jede Nummer aus der Warteschlange wird auch@r
zum Drucken in einem eindeutigen, sortierten Array ( ) gespeichert.quelle
Pyth,
464544Probieren Sie es hier aus.
Der Mehrfachfehler wurde
^
behoben. Zum Beispiel:Beachten Sie, dass dieser Code von einigen Bugfixes für den offiziellen Compiler abhängt, die nach der Beantwortung der Frage gesendet wurden. Es werden jedoch keine neuen Sprachfunktionen verwendet.
quelle
u
) in einer anderen reduzierung war unmöglich. Ich habe an der entsprechenden Stelle eine 2 in eine 3 geändert, sodass die Reduzierung 3 Eingaben anstelle von 2 erfordert. Das ist alles.