Qual é o algoritmo mais eficiente (em complexidade de tempo), conhecida hoje em dia para o Divisibity decisão Problema: dados dois inteiros, digamos, e b , faz uma divisão b ? Deixe claro que o que eu peço não é (necessariamente) um algoritmo para o Cálculo Restante. Eu só quero saber se a divide b ou não. Sendo mais específico, minha pergunta é se existe ou não algum algoritmo recente para Divisibilidade com complexidade de tempo melhor que O ( m log m log log m ) , em que m é o número de bits de max { a . Além disso, Ω ( m log m log log m ) é o limite inferior deste problema?
Obrigado e cumprimentos, e desculpe se esta é uma pergunta tão ingênua.
time-complexity
lower-bounds
nt.number-theory
primes
Leandro Zatesko
fonte
fonte
Respostas:
Colocando meus comentários em uma resposta: como a divisibilidade é (trivialmente) redutível à divisão e como a divisão é (não trivialmente) redutível à multiplicação por meio de abordagens como o método de Newton, seu problema deve ter a mesma complexidade de tempo da multiplicação inteira. AFAIK, não há limites inferiores para multiplicação conhecidos melhor que o linear trivial, portanto o mesmo deve ser verdadeiro para o seu problema - e em particular, já que a multiplicação é conhecida por ter algoritmos essencialmente) O ( n log n log ∗ n ) , suas esperanças de um n log n log log n limite inferior são quase certamente em vão.O ( n logn log∗n ) n logn logregistron
A razão pela qual a divisão se reduz precisamente em complexidade à multiplicação - como eu a entendo - é que o método de Newton fará uma sequência de multiplicações de diferentes tamanhos escalonáveis; isso significa que, se houver um algoritmo para multiplicação com complexidade , a complexidade de um algoritmo de divisão usando esse algoritmo de multiplicação como etapa intermediária será ao longo das linhas de Θ ( ∑ lg n k = 0 f ( nΘ ( f( N ) ) - e para todas as classes de complexidade em discussão, isso é apenasΘ(f(n)).Θ ( ∑lgnk = 0f( n2k) )) Θ ( f( N ) )
fonte
Eu acho que existem hacks tipo védico para alguns números que terminam em 3,7 etc. Ou base 2 ^ n divisores ...
Mas, de um modo geral, o algoritmo de divisão mais rápido parece ser a norma.
O melhor que conheço sem olhar é o algoritmo D dos métodos seminuméricos de Knuth ... Mas nunca verifiquei sua correção. É executado em mais ou menos O (mn-n ^ 2), onde m e n são o dividendo e o divisor ... sem levar em consideração a complexidade da multiplicação ...
Um limite inferior, no entanto, pode ser surpreendentemente baixo, pois sua pergunta está relacionada apenas ao problema de decisão.
fonte