Complejidad de tomar mod

23

Esta parece una pregunta que debería tener una respuesta fácil, pero no tengo una respuesta definitiva:

norteuna,pagsunamodpags

Simplemente dividir por llevaría tiempo donde es la complejidad de la multiplicación. Pero, ¿se puede realizar un poco más rápido?unapags O(METRO(norte))METRO(norte)mod

Suresh
fuente
1
Tal vez sea una pregunta tonta, pero ¿puedes convertir para que se escriba en la base y luego mirar el LSB? unapags
Pål GD
2
Podría, pero eso parece un trabajo extra, y probablemente requeriría división.
Suresh

Respuestas:

12

Shoup (Sección 3.3.5, Teorema 3.3, p. 62) da un límite para calcular el residuo en el tiempo O ( n log q ) donde a = q p + r y log a = n .rO(norteIniciar sesiónq)una=qpags+rIniciar sesiónuna=norte

Supongo que si y a son ambos números de aproximadamente n bits, entonces q (y por lo tanto log q ) debería ser bastante pequeño, dando OpagsunanorteqIniciar sesiónq .O(norte)

Si es un número de n bits, y punanortepags es relativamente pequeño, entonces el enfoque de multiplicación debería ser más rápido.

Luke Mathieson
fuente