Skip to content

Latest commit

 

History

History
99 lines (79 loc) · 4.61 KB

GMP_GAP.md

File metadata and controls

99 lines (79 loc) · 4.61 KB

GMP Function Comparison Table (not implemented)

This document records the functions of the PHP GMP extension that have not yet been implemented in the BigInt type, as a reference for future development.

Statistics

The GMP extension has 44 functions in total (excluding gmp_init and the alias gmp_div). 17 are covered, 27 are not covered.

Implemented

GMP function BigInt method / operator Description
gmp_init std::bigInt() construction
gmp_add add() / + addition
gmp_sub sub() / - subtraction
gmp_mul mul() / * multiplication
gmp_div_q div() / / division (quotient)
gmp_div_r mod() / % division (remainder)
gmp_div_qr divmod() quotient and remainder
gmp_mod mod() / % modulo
gmp_pow pow() power
gmp_powm powmod() modular exponentiation
gmp_neg neg() / - (unary) negation
gmp_abs abs() absolute value
gmp_sqrt sqrt() square root
gmp_gcd gcd() greatest common divisor
gmp_cmp cmp() / <=> comparison
gmp_and bitAnd() / & bitwise AND
gmp_or bitOr() / | bitwise OR
gmp_xor bitXor() / ^ bitwise XOR
gmp_com bitNot() / ~ bitwise NOT
gmp_testbit testBit() bit test
gmp_popcount popCount() population count
gmp_intval toInt() to int
gmp_strval toString() to string

Not implemented (sorted by priority)

High priority — commonly used number-theory functions

GMP function Suggested method name Signature Description
gmp_sign sign() (): int sign, returns -1/0/1
gmp_lcm lcm($x) (BigInt): BigInt least common multiple
gmp_perfect_square perfectSquare() (): bool whether it is a perfect square
gmp_perfect_power perfectPower() (): bool whether it is a perfect power
gmp_prob_prime probPrime($reps = 10) (int): int probabilistic primality test (Miller-Rabin)
gmp_nextprime nextPrime() (): BigInt next prime
gmp_binomial binomial($k) (int): BigInt binomial coefficient C(n, k)
gmp_fact fact() (): BigInt factorial n!

Medium priority — advanced number-theory functions

GMP function Suggested method name Signature Description
gmp_gcdext gcdext($x) (BigInt): array extended GCD, returns [g, s, t] such that g = s·a + t·b
gmp_invert invert($mod) (BigInt): BigInt|false modular inverse, returns false when it does not exist
gmp_sqrtrem sqrtrem() (): array square root + remainder, returns [root, rem]
gmp_jacobi jacobi($x) (BigInt): int Jacobi symbol
gmp_legendre legendre($x) (BigInt): int Legendre symbol
gmp_kronecker kronecker($x) (BigInt): int Kronecker symbol

Low priority — less commonly used

GMP function Suggested method name Signature Description
gmp_divexact divExact($x) (BigInt): BigInt exact division (used when divisibility is known; faster than ordinary division)
gmp_root root($n) (int): BigInt n-th root (truncated)
gmp_rootrem rootrem($n) (int): array n-th root + remainder
gmp_hamdist hamDist($x) (BigInt): int Hamming distance

Not applicable — conflicts with the immutable design

GMP function Reason
gmp_setbit directly modifies the GMP object; BigInt is immutable
gmp_clrbit directly modifies the GMP object; BigInt is immutable

To be evaluated

GMP function Description
gmp_scan0 finds the first 0 bit from the specified position
gmp_scan1 finds the first 1 bit from the specified position
gmp_random_bits generates a random-bit BigInt (needs a global seed; not suitable as an instance method)
gmp_random_range random BigInt in a range (needs a global seed; not suitable as an instance method)
gmp_random_seed sets the random seed (global state; not suitable as an instance method)
gmp_import imports from a binary string
gmp_export exports to a binary string

toString enhancement

Missing feature Description
toString($base) the current toString() only supports decimal. GMP's gmp_strval supports base 2-62 output

Update log

  • 2026-05-27: initial version, compared against PHP 8.4.14 GMP extension