gmp_prob_prime

funkcja

Testuje pierwszość dużej liczby całkowitej GMP; zwraca 0 (złożona), 1 (prawdopodobnie pierwsza) lub 2 (na pewno pierwsza).

gmp_prob_prime(GMP|int|string $num, int $repetitions = 10): int

gmp_prob_prime stosuje probabilistyczny test Millera–Rabina i zwraca zwykłe PHP int:

  • 2 — liczba jest na pewno pierwsza (małe liczby sprawdzane deterministycznie),
  • 1 — liczba jest prawdopodobnie pierwsza (im wyższy $repetitions, tym mniejsze ryzyko błędu),
  • 0 — liczba jest złożona (niepierwsza).
<?php
declare(strict_types=1);

echo gmp_prob_prime(97);  // wynik: 2 (na pewno pierwsza)
echo gmp_prob_prime(100); // wynik: 0 (złożona)

// Duża liczba — wynik probabilistyczny
echo gmp_prob_prime('999999999999999877'); // wynik: 1 (prawdopodobnie pierwsza)

// Generowanie losowych liczb pierwszych (schemat)
do {
    $kandydat = gmp_init(random_int(PHP_INT_MIN, PHP_INT_MAX));
} while (gmp_prob_prime($kandydat) === 0);
echo gmp_strval($kandydat); // losowa liczba (prawdopodobnie) pierwsza

Parametr $repetitions (domyślnie 10) steruje liczbą rund testu — większa wartość zwiększa pewność kosztem czasu. Funkcja jest niszowa: przydaje się przy generowaniu kluczy RSA, testach kryptograficznych i zadaniach z teorii liczb. Do sprawdzania pierwszości małych liczb (< 10^6) wystarczy pętla z %.

📘 Naucz się w lekcji →