Erklärung des Problems
Erzeugen Sie aus einer Menge eindeutiger, aufeinanderfolgender Primzahlen (nicht notwendigerweise einschließlich 2) die Produkte aller Kombinationen der ersten Potenzen dieser Primzahlen - z. B. keine Wiederholungen - und auch 1. Wenn Sie beispielsweise die Menge {2, 3, 5, 7} erzeugen Sie {1, 2, 3, 5, 6, 7, 10, 14, 15, 21, 30, 35, 42, 70, 105, 210}, weil:
1 = 1
2 = 2
3 = 3
5 = 5
6 = 2 x 3
7 = 7
10 = 2 x 5
14 = 2 x 7
15 = 3 x 5
21 = 3 x 7
30 = 2 x 3 x 5
35 = 5 x 7
42 = 2 x 3 x 7
70 = 2 x 5 x 7
105 = 3 x 5 x 7
210 = 2 x 3 x 5 x 7
Beachten Sie, dass wenn die Kardinalität Ihrer Eingabemenge k ist, dies Ihnen 2 ^ k Elemente in Ihrer Ausgabemenge gibt.
Regeln / Bedingungen
- Sie können eine beliebige Sprache verwenden. Streben Sie die kleinste Zeichenanzahl des Quellcodes an.
- Ihre Lösung muss entweder ein vollständiges Programm oder eine vollständige Funktion sein. Die Funktion kann anonym sein (wenn Ihre Sprache anonyme Funktionen unterstützt).
- Ihre Lösung sollte Produkte bis mindestens 2 ^ 31 unterstützen können. Machen Sie sich keine Sorgen über die Erkennung oder Behandlung von Integer-Überläufen, wenn Ihnen Zahlen übergeben werden, deren Produkt zu groß ist, um dargestellt zu werden. Bitte geben Sie jedoch die Grenzen Ihrer Berechnungen an.
- Sie können entweder eine Liste oder ein Set akzeptieren und entweder eine Liste oder ein Set erstellen. Sie können davon ausgehen, dass die Eingabe sortiert ist, müssen jedoch keine sortierte Ausgabe erstellen.
Hintergrund
Wann oder warum ist das sinnvoll? Ein Ort, an dem es sehr nützlich ist, eine Tabelle mit Multiplikatoren zu erstellen, die in einem Ganzzahlfaktor-Algorithmus, der als Square Forms Factorization bezeichnet wird, parallel laufen. Dort verringert jeder ungerade Multiplikator, den Sie versuchen, die Wahrscheinlichkeit, dass der Algorithmus ausfällt (um einen Faktor zu finden), auf harten Halbwerten um ungefähr 50%. Mit der Menge der generierenden Primzahlen {3, 5, 7, 11}, die eine Menge von 16 parallel laufenden Testmultiplikatoren ergibt, versagt der Algorithmus ungefähr 2 ^ –16 der Zeit auf harten Halbzeiten. Das Hinzufügen von 13 zur Liste der Primzahlen ergibt einen Satz von 32 Testmultiplikatoren, wodurch die Wahrscheinlichkeit eines Ausfalls auf ungefähr 2 ^ –32 verringert wird, was eine drastische Ergebnisverbesserung ohne zusätzlichen Rechenaufwand zur Folge hat (da selbst bei doppelt so vielen parallel laufenden Multiplikatoren weiter Durchschnittlich findet es die Antwort immer noch in der gleichen Anzahl von Schritten).