necesito una manera de calcular:exponenciación modular en Java
(g^u * y^v) mod p
en Java.
he encontrado este algoritmo para calcular (g^u) mod p:
int modulo(int a,int b,int c) {
long x=1
long y=a;
while(b > 0){
if(b%2 == 1){
x=(x*y)%c;
}
y = (y*y)%c; // squaring the base
b /= 2;
}
return (int) x%c;
}
y funciona muy bien, pero me parece que no puede encontrar una manera de hacer esto para
(g^u * y^v) mod p
ya que mis habilidades matemáticas son mediocres.
Para ponerlo en contexto, es para una implementación de Java de un DSA "reducido": la parte de verificación requiere que esto se resuelva.
Supongo que p es primordial, ¿no? –
sí, p es primo, creo que esto lo resuelve: (g^u * y^v) mod p = (g^u mod p) * (y^v mod p) mod p, aunque solo lo he probado con números pequeños hasta ahora –
¿Y es grande? La parte 'mod p' me parece como si quisieras usar' BigInteger' en lugar de long. –