Ce face BigInteger.pow
a.pow(n) calculează a la puterea n, exact. Exponentul este un int nenegativ. BigInteger.TWO.pow(100) are 31 de cifre.
a.mod(m) returnează restul împărțirii la m, mereu între 0 și m−1, chiar dacă a este negativ. remainder(m) se comportă ca %: rezultatul are semnul lui a. m trebuie să fie pozitiv pentru mod, altfel aruncă ArithmeticException.
modPow(e, m) calculează (a^e) mod m fără să construiască numărul uriaș a^e. Este baza criptografiei RSA.
Parametri
| Parametru | Descriere |
|---|---|
exponent |
Puterea, un int ≥ 0 pentru pow. |
m |
Modulul, pozitiv. |
Ce returnează
Un BigInteger nou.
Exemple
Exemplul 1: Puteri mari ale lui 2
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
System.out.println("2^64 = " + BigInteger.TWO.pow(64));
BigInteger p = BigInteger.TWO.pow(100);
System.out.println("2^100 = " + p + ", cifre: " + p.toString().length());
System.out.println("Ultima cifră a lui 7^2026: " + BigInteger.valueOf(7).pow(2026).mod(BigInteger.TEN));
}
}
Rezultat
2^64 = 18446744073709551616
2^100 = 1267650600228229401496703205376, cifre: 31
Ultima cifră a lui 7^2026: 9
Exemplul 2: mod față de remainder la numere negative
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger a = BigInteger.valueOf(-17);
BigInteger m = BigInteger.valueOf(5);
System.out.println("-17 mod 5 = " + a.mod(m));
System.out.println("-17 remainder 5 = " + a.remainder(m));
System.out.println("-17 % 5 în int = " + (-17 % 5));
}
}
Rezultat
-17 mod 5 = 3
-17 remainder 5 = -2
-17 % 5 în int = -2
Exemplul 3: modPow: verificarea unui cod de control
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger baza = BigInteger.valueOf(3);
BigInteger exponent = new BigInteger("1000000000000");
BigInteger m = BigInteger.valueOf(1_000_000_007);
System.out.println("3^(10^12) mod 1000000007 = " + baza.modPow(exponent, m));
}
}
Rezultat
3^(10^12) mod 1000000007 = 570188345
Greșeli frecvente
- Calculezi
a.pow(e).mod(m)pentru exponenți uriași. Numărul intermediar nu mai încape în memorie; foloseștemodPow. - Folosești
modcu un modul negativ sau zero. AruncăArithmeticException.
Comenzi înrudite
BigInteger: Întreg fără limită de mărime (cât îl lasă memoria); BigInteger.valueOf(n) îl creează dintr-un long.BigInteger.add: Adunare, scădere, înmulțire și împărțire întreagă cu BigInteger, fără depășire.BigInteger.isProbablePrime: Verifică dacă un număr mare este prim: false înseamnă sigur compus, true înseamnă prim cu probabilitate foarte mare.Math.pow: Ridică un număr la o putere și returnează rezultatul ca double; exponentul poate fi și negativ sau cu zecimale.