Tôi cần một cách để tính toán:Lũy thừa Modular trong Java
(g^u * y^v) mod p
trong Java.
tôi đã tìm thấy thuật toán này để tính (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;
}
và nó hoạt động tuyệt vời, nhưng tôi dường như không thể tìm thấy một cách để làm điều này cho
(g^u * y^v) mod p
vì kỹ năng toán học của tôi kém chất lượng.
Để đặt nó trong ngữ cảnh, đó là cho một thực hiện java của một DSA "giảm" - phần xác minh yêu cầu điều này phải được giải quyết.
Tôi giả sử p là số nguyên tố, phải không? –
vâng, p là số nguyên tố, tôi nghĩ điều này giải quyết nó: (g^u * y^v) mod p = (g^u mod p) * (y^v mod p) mod p, mặc dù tôi chỉ thử nghiệm nó với số nhỏ cho đến nay –
Và nó có lớn không? Phần 'mod p' trông giống như bạn muốn dùng' BigInteger' thay vì dài. –