Considere el siguiente problema:
Sea un subconjunto finito de los números naturales.
Deje | donde es el máximo común divisor de eg c d ( s i , s j ) s i , s j ∈ S , s i ≠ s j } g c d ( x , y ) x y
Encontrar el elemento máximo de .
Este problema se puede resolver tomando el divisor común más grande de cada par usando el algoritmo de Euclides y haciendo un seguimiento del más grande.
¿Hay una manera más eficiente de resolver esto?
algorithms
number-theory
Tommy
fuente
fuente
Respuestas:
Aquí hay un algoritmo eficiente (en Python ). Por favor encuentre la explicación a continuación.
Explicación del fragmento de código anterior:
Observamos lo siguiente en este problema:
max(S)
S
max
de todos esos números con la propiedad mencionada anteriormente.Con estas observaciones, el programa hace lo siguiente:
set
de la lista. Como conjuntos se pueden buscar de manera eficiente enO(log(n))
m
.m
hasta1
, encuentre el primer número que tiene dos o más múltiplos en el conjunto. El primer número encontrado es el resultado.Espero que esto quede claro. Avíseme si necesita una explicación más detallada.
fuente
i
comenzando conm
hasta1
comprobamos si dos o más múltiplos dei
están en el conjunto. En este ejemplo, dos múltiplos de 2 están en el conjunto '2 y 4'. entonces la respuesta es 2. Elwhile
ciclo interno verifica todos los múltiplos dei
hasta quem' as
m` es el masx de la lista.