Si tengo los números n> 0, k> 0, a> 0 y el número primo x .. ¿Cuál es la forma más rápida de calcular ((n ^ k) * a) módulo x?

“Más rápido” es un término vago aquí. Contestaré desde el punto de vista de la computación humana. La forma más rápida para que un humano obtenga [matemáticas] ((n ^ k) * a) [/ matemáticas] mod [matemáticas] x [/ matemáticas] es mediante la exponenciación modular. Esto significa que [matemática] (a [/ matemática] mod [matemática] b) (a [/ matemática] mod [matemática] b)% b = a * a [/ matemática] mod [matemática] b [/ matemática]. Podemos expresar [matemáticas] ((n ^ k) * a) [/ matemáticas] mod [matemáticas] x [/ matemáticas] como [matemáticas] n * n * n [/ matemáticas] (repetir k veces) [matemáticas] * a [/ math] mod [math] x [/ math]. Usando la exponenciación modular, podemos simplificar esto a ([matemática] (n [/ matemática] mod [matemática] x) ^ k) * a [/ matemática] mod [matemática] x [/ matemática]. Ampliando esto aún más, el algoritmo básico escrito en pseudocódigo sería:

num = 1
repite k veces:
num * n mod x
num mod x
num * a mod x
num mod x

Estos son los pasos básicos a seguir. Si no comprende el pseudocódigo, siéntase libre de comentar a continuación, y agregaré una explicación por escrito.

Gracias por el A2A, Maala!