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 %.