¿Cuál es el algoritmo más eficiente para la divisibilidad?


12

¿Cuál es el más eficiente (en la complejidad del tiempo) algoritmo conocido hoy en día para la Divisibity Decisión Problema: dados dos números enteros, por ejemplo y b , hace una división B ? Que quede claro que lo que pido no es (necesariamente) un algoritmo para el cálculo del resto. Solo quiero saber si a divide b o no. Siendo más específico, mi pregunta es si existe o no algún algoritmo reciente para la Divisibilidad con complejidad de tiempo mejor que O ( m log m log log m ) , donde m es el número de bits de max { aabababO(mlogmloglogm)m . Además, ¿es Ω ( m log m log log m ) el límite inferior de este problema?max{a,b}Ω(mlogmloglogm)

Gracias y saludos, y lo siento si esta es una pregunta tan ingenua.


AFAIK no se conocen límites inferiores no triviales. Creo que se sabe que la multiplicación y la división tienen esencialmente la misma complejidad (¿aunque posiblemente sea un factor de registro logarítmico?) A través del método de Newton, y dado que no hay un límite inferior no lineal conocido en la multiplicación, creo que cualquier límite inferior de la forma Estás diciendo que sería un gran resultado.
Steven Stadnicki

(En realidad, mirándolo ahora, creo que el factor de registro logarítmico desaparece porque si bien estás haciendo un número no constante de multiplicaciones, no todas tienen la misma longitud, por lo que los factores superlineales se pueden absorber de la misma manera que, por ejemplo, sigue siendo lineal ennaunque tiene un número no constante de factores 'lineales'.)k=1lgnn2kn
Steven Stadnicki

Respuestas:


4

O(nlognlogn)nlognloglogn

Θ(f(n))Θ(k=0lgnf(n2k))Θ(f(n))


2
Nitpick: No veo cómo obtienes un límite inferior de este tipo de razonamiento, incluso si suponemos que no hay mejores algoritmos para la multiplicación que los mejores conocidos actualmente. Sus reducciones implican que la divisibilidad no es más difícil que la multiplicación. Pero aún existe la posibilidad de que la divisibilidad sea más fácil que la división y más fácil que la multiplicación, ya que la divisibilidad solo requiere una respuesta sí / no en lugar de un número. (Al menos, la reducción que menciona no parece descartar eso).
DW

2
@DW De acuerdo, y ese es un excelente punto; pero no estaba tratando de obtener un límite inferior. Más bien, el punto es que cualquier límite inferior en la divisibilidad implica el límite inferior correspondiente en la multiplicación, y dado que no se conocen tales límites más allá del límite lineal trivial, entonces obtener cualquier límite inferior mejor que lineal en la divisibilidad (que es parte de lo que OP solicitado) es poco probable.
Steven Stadnicki

@DW No me sorprendería enterarme de un límite superior lineal en la divisibilidad, y como usted dice, eso no implicaría específicamente nada sobre los límites superiores en la multiplicación, pero no hay resultados específicos en esa dirección AFAIK.
Steven Stadnicki

-2

Creo que hay trucos de tipo védico para algunos números que terminan en 3,7, etc. O divisores base 2 ^ n ...

Pero en términos generales, el algoritmo de división más rápido parece ser la norma.

El mejor que conozco sin mirar es el Algoritmo D de los métodos Seminuméricos de Knuth ... Sin embargo, nunca verifiqué su corrección. Se ejecuta en más o menos O (mn-n ^ 2) donde myn son el dividendo y el divisor ... sin factorizar la complejidad de la multiplicación ...

Sin embargo, un límite inferior podría ser extremadamente bajo ya que su pregunta solo se refiere al problema de decisión.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.