Qual é o algoritmo mais eficiente para a divisibilidade?


12

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 { aabababO(mlogmloglogm)m . Além disso, Ω ( m log m log log m ) é o limite inferior deste problema?max{a,b}Ω(mlogmloglogm)

Obrigado e cumprimentos, e desculpe se esta é uma pergunta tão ingênua.


AFAIK, não há limites inferiores não triviais conhecidos. Eu acredito que a multiplicação ea divisão são conhecidos por terem essencialmente a mesma complexidade (embora, eventualmente, pode ser até um fator log log?) Através do método de Newton, e uma vez que não é conhecido não-linear limite inferior na multiplicação então eu acho que qualquer um ligado de forma menor você está afirmando que seria um grande resultado.
Steven Stadnicki

(Na verdade, olhando agora, acho que o fator de log desaparece porque, enquanto você faz um número não constante de multiplicações, elas não têm o mesmo comprimento, portanto os fatores superlineares podem ser absorvidos da mesma maneira que, por exemplo, ainda é linear emnmesmo que tem um número de factores não constante 'linear').k=1lgnn2kn
Steven Stadnicki

Respostas:


4

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(nlognlogn)nlognloglogn

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)).Θ(k=0lgnf(n2k))Θ(f(n))


2
Nitpick: Não vejo como você obtém um limite mais baixo desse tipo de raciocínio, mesmo se assumirmos que não há algoritmos melhores para multiplicação do que os melhores atualmente conhecidos. Suas reduções implicam que a divisibilidade não é mais difícil que a multiplicação. Mas ainda existe a possibilidade de que a divisibilidade possa ser mais fácil que a divisão e mais fácil que a multiplicação, pois a divisibilidade requer apenas uma resposta sim / não em vez de um número. (Pelo menos, a redução que você menciona não parece descartar essa possibilidade.)
DW

2
@DW concordou, e esse é um ponto excelente; mas eu não estava tentando obter um limite inferior. Em vez disso, o ponto é que qualquer limite inferior à divisibilidade implica o limite inferior correspondente na multiplicação, e como esses limites não são conhecidos além do limite linear trivial, obtendo um limite inferior à divisibilidade melhor que o linear (que é parte do que OP solicitado) é improvável.
Steven Stadnicki 06/07/19

@DW Eu não ficaria totalmente chocado ao saber de um limite superior linear da divisibilidade e, como você diz, isso não implicaria especificamente nada sobre os limites superiores da multiplicação, mas não há resultados específicos nessa direção do AFAIK.
Steven Stadnicki 06/07/19

-2

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.