Da einige der Faktoren wiederholt werden, müssen Sie ihre Multiplizitäten berücksichtigen, um die Wiederholung einiger Produkte zu vermeiden.
Das Array bei Bedarf sortieren und die Multiplizitäten zählen (aufeinander folgende gleiche Werte).
Dann, unter der Annahme k distinkte Werte mit jeweiligen Multiplizitäten Mk, emulieren Sie k verschachtelte Schleifen, jeweils von 0 bis einschließlich Mk. Betrachten Sie für diese Emulation ein Array von Zählern, die alle auf 0 initialisiert sind. Dann inkrementieren Sie den ersten Zähler und wenn er seinen Maximalwert erreicht hat, setzen Sie ihn zurück und tragen Sie ihn zum nächsten Zähler. Wenn der nächste Zähler sein Maximum erreicht, setzen Sie ihn zurück und übertragen Sie ihn zum nächsten ...
Verwenden Sie diese Zähler als Exponenten der Faktoren und berechnen Sie das Produkt. Die zweite Zahl ist das Produkt aller Faktoren geteilt durch die erste Zahl.
z.
Values: 2, 3, 4
Multiplicities: 2, 1, 1
Counters:
000
100
200
010
110
210
001
101
201
011
111
211
First numbers:
1
2
2²
3
2.3
2²3
4
2.4
2²4
3.4
2.3.4
2²3.4
Second numbers = 2²3.4/First numbers
Die Gesamtzahl der Produktpaar gleich das Produkt der Multiplizitäten plus eins, (M1 + 1) (M2 + 1) ... (Mk + 1).
warum erscheinen '2 * 3, 2 * 4' und' 2 * 4, 2 * 3' beide im Ausgang, aber '2 * 2, 3 * 4' ist da, während' 3 * 4, 2 * 2' ist nicht? –
@lazydog es war ein Fehler, sorry. – user2502761
Sie könnten einfach die Zahlen von 0 bis 2^n aufzählen und ihre binäre Darstellung verwenden, um zu bestimmen, welche Zahlen in die erste und welche in das zweite Produkt eingehen, und eine Menge verwenden, um Dubletten auszusondern. –