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)Smaxde todos esos números con la propiedad mencionada anteriormente.Con estas observaciones, el programa hace lo siguiente:
setde la lista. Como conjuntos se pueden buscar de manera eficiente enO(log(n))m.mhasta1, 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
icomenzando conmhasta1comprobamos si dos o más múltiplos deiestá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. Elwhileciclo interno verifica todos los múltiplos deihasta quem' asm` es el masx de la lista.