Considere o seguinte problema:
Deixe ser um subconjunto finito dos números naturais.
Seja | onde é o maior divisor comum de e g c d ( x , y ) x y
Localize o elemento máximo de .
Esse problema pode ser resolvido usando o maior divisor comum de cada par usando o algoritmo de Euclides e mantendo o controle do maior.
Existe uma maneira mais eficiente de resolver isso?
algorithms
number-theory
Tommy
fonte
fonte
Respostas:
Aqui está um algoritmo eficiente (em Python ). Por favor, encontre a explicação abaixo.
Explicação do trecho de código acima:
Observamos o seguinte neste problema:
max(S)
S
max
de todos esses números com a propriedade mencionada acima.Com essas observações, o programa faz o seguinte:
set
lista. Como os conjuntos podem ser pesquisados eficientemente emO(log(n))
m
.m
até1
, encontre o primeiro número que tem dois ou mais múltiplos no conjunto. O primeiro número encontrado é o resultado.Espero que isso esteja claro. Entre em contato se precisar de uma explicação mais detalhada.
fonte
i
começando comm
até1
vamos verificar se duas ou mais múltiplos dei
estão no conjunto. Neste exemplo, dois múltiplos de 2 estão no conjunto '2 e 4'. então a resposta é 2. Owhile
loop interno verifica todos os múltiplos dei
atém' as
m` é o masx da lista.