Betrachten Sie das folgende Problem:
Sei eine endliche Teilmenge der natürlichen Zahlen.
Sei | wobei der größte gemeinsame Teiler von undg c d ( s i , s j ) s i , s j ∈ S , s i ≠ s j } g c d ( x , y ) x y
Finden Sie das maximale Element von .
Dieses Problem kann gelöst werden, indem der größte gemeinsame Teiler jedes Paares unter Verwendung des Euklid-Algorithmus genommen und der größte verfolgt wird.
Gibt es eine effizientere Möglichkeit, dies zu lösen?
algorithms
number-theory
Tommy
quelle
quelle
Antworten:
Hier ist ein effizienter Algorithmus (in Python ). Die Erklärung finden Sie unten.
Erläuterung des obigen Codeausschnitts:
Bei diesem Problem stellen wir Folgendes fest:
max(S)
S
max
all dieser Zahlen mit der oben erwähnten Eigenschaft.Mit diesen Beobachtungen führt das Programm Folgendes aus:
set
aus der Liste. As Sets können effizient in gesucht werdenO(log(n))
m
.m
bis bis1
zur ersten Zahl, die zwei oder mehr Vielfache im Satz enthält. Die erste gefundene Zahl ist das Ergebnis.Ich hoffe das ist klar. Bitte lassen Sie mich wissen, wenn Sie eine ausführlichere Erklärung benötigen.
quelle
i
Beginn mitm
bis1
wir prüfen, ob zwei oder mehr Vielfache voni
im Set sind. In diesem Beispiel befinden sich zwei Vielfache von 2 in der Menge '2 und 4'. Die Antwort lautet also 2. Die innerewhile
Schleife überprüft alle Vielfachen voni
bism' as
m` ist der Masx der Liste.