BigInteger.pow în Java

pow ridică la putere (2^100 exact); mod dă restul împărțirii, mereu pozitiv; modPow calculează rapid (a^b) mod m.

Sintaxă
BigInteger pow(int exponent)
BigInteger mod(BigInteger m)
BigInteger remainder(BigInteger m)
BigInteger modPow(BigInteger exponent, BigInteger m)

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ște modPow.
  • Folosești mod cu 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.