Tengo dos variables, x y y . Busco calcular el producto de x y y modulo p , donde p es primo.
Para valores pequeños de x y y (menos de 43 bits cada uno), pude realizar el cálculo utilizando Reducción de Barrett .
Sin embargo, para grandes valores de x y y Si se produce un desbordamiento que supera los 128 bits, el valor calculado es incorrecto. Esto se debe a que x y y deben multiplicarse entre sí, lo que debe almacenarse en un tipo de datos de 128 bits. A continuación, ese producto debe multiplicarse por una constante precalculada, r , dando como resultado un valor que puede ser almacenado en 192 bits.
¿Es posible calcular xy mod p
utilizando la Reducción de Barrett donde el desbordamiento de más de 128 bits no ¿también sin depender de la aritmética de punto flotante?
Si ayuda, tengo la capacidad de realizar la multiplicación de x y y y almacenar el producto en dos variables: a y b , donde a contiene los 64 bits altos del producto, y b contiene los 64 bits inferiores del producto.