TypePHP 编译器 https://swoole.com/aot/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

99 lines
4.1 KiB

# GMP 函数对照表(未实现)
本文档记录 PHP GMP 扩展中尚未在 BigInt 类型中实现的函数,作为后续开发的参考。
## 统计
GMP 扩展共 44 个函数(不含 `gmp_init` 和别名 `gmp_div`)。已覆盖 17 个,未覆盖 27 个。
## 已实现
| GMP 函数 | BigInt 方法 / 运算符 | 说明 |
|----------|---------------------|------|
| `gmp_init` | `std::bigInt()` | 构造 |
| `gmp_add` | `add()` / `+` | 加法 |
| `gmp_sub` | `sub()` / `-` | 减法 |
| `gmp_mul` | `mul()` / `*` | 乘法 |
| `gmp_div_q` | `div()` / `/` | 除法(商) |
| `gmp_div_r` | `mod()` / `%` | 除法(余数) |
| `gmp_div_qr` | `divmod()` | 商和余数 |
| `gmp_mod` | `mod()` / `%` | 取模 |
| `gmp_pow` | `pow()` | 幂运算 |
| `gmp_powm` | `powmod()` | 模幂 |
| `gmp_neg` | `neg()` / `-`(一元) | 取负 |
| `gmp_abs` | `abs()` | 绝对值 |
| `gmp_sqrt` | `sqrt()` | 平方根 |
| `gmp_gcd` | `gcd()` | 最大公约数 |
| `gmp_cmp` | `cmp()` / `<=>` | 比较 |
| `gmp_and` | `bitAnd()` / `&` | 按位与 |
| `gmp_or` | `bitOr()` / `\|` | 按位或 |
| `gmp_xor` | `bitXor()` / `^` | 按位异或 |
| `gmp_com` | `bitNot()` / `~` | 按位取反 |
| `gmp_testbit` | `testBit()` | 位测试 |
| `gmp_popcount` | `popCount()` | 人口统计 |
| `gmp_intval` | `toInt()` | 转 int |
| `gmp_strval` | `toString()` | 转字符串 |
## 未实现(按优先级排序)
### 高优先级 — 常用数论函数
| GMP 函数 | 建议方法名 | 签名 | 说明 |
|----------|-----------|------|------|
| `gmp_sign` | `sign()` | `(): int` | 符号,返回 -1/0/1 |
| `gmp_lcm` | `lcm($x)` | `(BigInt): BigInt` | 最小公倍数 |
| `gmp_perfect_square` | `perfectSquare()` | `(): bool` | 是否完全平方数 |
| `gmp_perfect_power` | `perfectPower()` | `(): bool` | 是否完全幂 |
| `gmp_prob_prime` | `probPrime($reps = 10)` | `(int): int` | 概率素性检测(Miller-Rabin) |
| `gmp_nextprime` | `nextPrime()` | `(): BigInt` | 下一个素数 |
| `gmp_binomial` | `binomial($k)` | `(int): BigInt` | 二项式系数 C(n, k) |
| `gmp_fact` | `fact()` | `(): BigInt` | 阶乘 n! |
### 中优先级 — 高级数论函数
| GMP 函数 | 建议方法名 | 签名 | 说明 |
|----------|-----------|------|------|
| `gmp_gcdext` | `gcdext($x)` | `(BigInt): array` | 扩展 GCD,返回 [g, s, t] 使得 g = s·a + t·b |
| `gmp_invert` | `invert($mod)` | `(BigInt): BigInt\|false` | 模逆元,不存在时返回 false |
| `gmp_sqrtrem` | `sqrtrem()` | `(): array` | 平方根+余数,返回 [root, rem] |
| `gmp_jacobi` | `jacobi($x)` | `(BigInt): int` | Jacobi 符号 |
| `gmp_legendre` | `legendre($x)` | `(BigInt): int` | Legendre 符号 |
| `gmp_kronecker` | `kronecker($x)` | `(BigInt): int` | Kronecker 符号 |
### 低优先级 — 较少使用
| GMP 函数 | 建议方法名 | 签名 | 说明 |
|----------|-----------|------|------|
| `gmp_divexact` | `divExact($x)` | `(BigInt): BigInt` | 精确除法(已知整除时使用,比普通除法更快) |
| `gmp_root` | `root($n)` | `(int): BigInt` | n 次方根(截断) |
| `gmp_rootrem` | `rootrem($n)` | `(int): array` | n 次方根+余数 |
| `gmp_hamdist` | `hamDist($x)` | `(BigInt): int` | 汉明距离 |
### 不适用 — 与不可变设计冲突
| GMP 函数 | 原因 |
|----------|------|
| `gmp_setbit` | 直接修改 GMP 对象,BigInt 不可变 |
| `gmp_clrbit` | 直接修改 GMP 对象,BigInt 不可变 |
### 待评估
| GMP 函数 | 说明 |
|----------|------|
| `gmp_scan0` | 从指定位置找第一个 0 位 |
| `gmp_scan1` | 从指定位置找第一个 1 位 |
| `gmp_random_bits` | 生成随机位数的 BigInt(需全局种子,不适合实例方法) |
| `gmp_random_range` | 区间随机 BigInt(需全局种子,不适合实例方法) |
| `gmp_random_seed` | 设置随机种子(全局状态,不适合实例方法) |
| `gmp_import` | 从二进制字符串导入 |
| `gmp_export` | 导出为二进制字符串 |
## toString 增强
| 缺失功能 | 说明 |
|---------|------|
| `toString($base)` | 当前 `toString()` 仅支持十进制。GMP 的 `gmp_strval` 支持 2-62 进制输出 |
## 更新记录
- 2026-05-27:初始版本,对比 PHP 8.4.14 GMP 扩展