Considérez le problème suivant:
Soit un sous-ensemble fini des nombres naturels.
Soit | où est le plus grand diviseur commun de et
Trouver l'élément maximum de .
Ce problème peut être résolu en prenant le plus grand diviseur commun de chaque paire en utilisant l'algorithme d'Euclide et en gardant une trace du plus grand.
Existe-t-il un moyen plus efficace de résoudre ce problème?
algorithms
number-theory
Tommy
la source
la source
Réponses:
Voici un algorithme efficace (en Python ). Veuillez trouver l'explication ci-dessous.
Explication de l'extrait de code ci-dessus:
Nous observons ce qui suit dans ce problème:
max(S)
S
max
de tous ces numéros avec la propriété mentionnée ci-dessus.Avec ces observations, le programme fait ce qui suit:
set
de la liste. Comme les ensembles peuvent être recherchés efficacement dansO(log(n))
m
.m
jusqu'à1
, trouvez le premier nombre qui a deux ou plusieurs multiples dans l'ensemble. Le premier tel nombre trouvé est le résultat.J'espère que cela est clair. Veuillez me faire savoir si vous avez besoin d'une explication plus détaillée.
la source
i
début avecm
jusqu'à ce que1
nous vérifions si deux ou plusieurs multiples dei
sont dans l'ensemble. Dans cet exemple, deux multiples de 2 sont dans l'ensemble «2 et 4». donc la réponse est 2. Lawhile
boucle interne vérifie tous les multples dei
tillm' as
m` est le masx de la liste.