Próbuję zrozumieć zachowanie modPow i modInverse klasy BigInteger Java, ponieważ nie działają tak, jak bym się spodziewał. Może brakuje mi coś prostego, więc tutaj jest bardzo prosty kawałek kodu:Java BigInteger modInverse i modPow
BigInteger a = BigInteger.valueOf(2);
BigInteger b = BigInteger.valueOf(5);
BigInteger n1 = new BigInteger(32, 100, new SecureRandom());
System.out.println("n = " + n1);
System.out.println("a^b = " + a.modPow(b, n1) + " ;; (a^b)^(b^-1) = " + a.modPow(b, n1).modPow(b.modInverse(n1), n1));
Wyjście pojawia się:
n = 2664021049 (This is a random prime, can change each run)
a^b = 32 ;; (a^b)^(b^-1) = 4
Teraz chciałbym oczekiwać 4
tam w ostatnim wierszu do być 2
, jak to jest (a^b)^(1/b) = a^(b*(1/b)) = a
Czy to również działa w polu modulo?
Co robię źle?
'(a^b)^(1/b) = a^(b * (1/b))' - to nie działa dla modułowych odwrotności. – user2357112
Czy istnieje inny sposób, w którym podano '(a^b)' i 'b' znajduję' a'? – user7295333