Gibt es effiziente Algorithmen zur Überprüfung, ob eine Liste von Ganzzahlen paarweise koprime ist, oder wäre ein allgemeinerer Algorithmus die beste verfügbare Option?
algorithms
primes
user2782067
quelle
quelle
Antworten:
Zunächst zwei Fakten zu Coprime-Ganzzahlen:
Daraus folgt, dass eine Menge unterschiedlicher Ganzzahlen paarweise Koprime ist, wenn ihr Produkt gleich dem kleinsten gemeinsamen Vielfachen ist.{a,b,⋯z}
Sie können das am wenigsten verbreitete Vielfache mithilfe der folgenden Identität berechnen:
Angenommen, Sie haben Zahlen mit jeweils k Ziffern und das Multiplizieren / Teilen / Modifizieren von zwei Zahlen ist O ( 1 ) (was je nach Modell eine gute Annahme sein kann oder nicht), dann:n k O(1)
Somit ist die zeitliche Komplexität des gesamten Algorithmus .O ( n k )
quelle
Ja. Der naive Ansatz, jedes Zahlenpaar zu überprüfen, benötigt quadratische Zeit, aber es gibt effizientere Algorithmen. Es gibt einen nahezu linearen Zeitalgorithmus, der im folgenden Artikel beschrieben wird:
Daniel J. Bernstein. Berücksichtigung von Koprimes in im Wesentlichen linearer Zeit . Journal of Algorithms 54 (2005), 1–30.
Siehe auch https://cstheory.stackexchange.com/q/3393/5038 . Das ist fast so effizient, wie Sie es sich nur wünschen können.
Um zu verdeutlichen, wie dies in Ihrer Situation hilft, ist es trivial zu überprüfen, ob es sich um eine paarweise Koprime handelt, wenn Sie eine Koprime-Basis gefunden und jedes Element über die Basis hinweg berücksichtigt haben. Wenn es sich nicht um eine paarweise Koprime handelt, hat ein Paar ein gemeinsames Paar Faktor, und das wird ein Faktor sein, der in der Coprime-Basis liegt und der in der Faktorisierung von beiden vorhanden ist. Wenn bei der Faktorisierung von zwei oder mehr Zahlen kein gemeinsamer Faktor vorhanden ist, wissen Sie, dass die Zahlen paarweise koprime sind. Sobald Sie die Faktorisierungen haben, können Sie in der linearen Zeit leicht überprüfen, ob Zahlen in mehr als einer Faktorisierung vorhanden sind.
quelle
Factoring over a coprime base
beziehtchecking if a list of integers is pairwise coprime
.Finden Sie die Primfaktoren jeder Zahl. Die Zahlen sind alle paarweise koprime, wenn und nur wenn jede Primzahl in der gesamten Sammlung unterschiedlich ist. Diese Überprüfung kann in O (n) -Zeit mithilfe einer Hash-Tabelle durchgeführt werden.
Bearbeiten: Die Antwort von Draconis ist jedoch besser, da keine Faktorisierung erforderlich ist. Die GCD-Berechnung ist schneller, wenn Ihre Zahlen groß und / oder prim sind.
quelle