Algoritmo de multiplicación modular específico [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Overflow: a * a mod n 5 respuestas

Tengo 3 números grandes de 64 bits: A, B y C. Quiero calcular:

(A x B) mod C

considerando mis registros son 64 bits, es decir, escribira * b en realidad produce (A x B) mod 2⁶⁴.

¿Cuál es la mejor manera de hacerlo? Estoy codificando en C, pero no creo que el lenguaje sea relevante en este caso.

Después de recibir votos positivos sobre el comentario que apunta a esta solución:

(a * b) % c == ((a % c) * (b % c)) % c

déjame ser específico: esta no es una solución, porque ((a% c) * (b% c)) aún puede ser mayor que 2⁶⁴, y el registro aún se desbordaría y me daría la respuesta incorrecta. Quisiera

(((A mod C) x (B mod C)) mod 2⁶⁴) mod C

Respuestas a la pregunta(1)

Su respuesta a la pregunta