|
LAMMP 4.2.0
Lamina High-Precision Arithmetic Library
|
numth.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:类型定义 | |
| typedef int8_t | schar |
| typedef int8_t * | scharp |
| typedef int32_t | sint |
| typedef int32_t * | sintp |
| typedef int64_t | slong |
| typedef int64_t * | slongp |
| typedef int16_t | sshort |
| typedef int16_t * | sshortp |
| typedef uint8_t | uchar |
| Copyright (C) 2026 HJimmyK(Jericho Knox) | |
| typedef uint8_t * | ucharp |
| typedef uint32_t | uint |
| typedef uint32_t * | uintp |
| typedef uint64_t | ulong |
| typedef uint64_t * | ulongp |
| typedef uint16_t | ushort |
| typedef uint16_t * | ushortp |
Copyright (C) 2026 HJimmyK(Jericho Knox)
This file is part of LAMMP.
LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY.
| mp_size_t lmmp_2factorial_ | ( | mp_ptr | dst, |
| mp_bitcnt_t | bits, | ||
| mp_size_t | rn, | ||
| uint | n | ||
| ) |
计算 n!! 双阶乘
| dst | 结果指针 |
| bits | n!! 的2的因子数 |
| rn | 结果指针的 limb 长度 |
| n | 双阶乘的阶数 |
| mp_size_t lmmp_2factorial_size_ | ( | uint | n, |
| mp_bitcnt_t * | bits | ||
| ) |
计算 n!! 双阶乘的 limb 缓冲区长度
| n | 双阶乘的阶数 |
| bits | 被修改为 n!! 的2的因子数 |
计算等差数列乘积 x(x+m)...(x+n*m)
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| x | 首项 |
| n | 等差数列共n+1项 |
| m | 公差(大于1) |
计算等差数列乘积 x(x+m)...(x+n*m)的 limb 缓冲区长度
| x | 首项 |
| n | 等差数列共n+1项 |
| m | 公差 |
计算等差数列乘积 x(x+m)...(x+n*m)的 limb 缓冲区长度
This file is part of LAMMP.
LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY.
See https://www.gnu.org/licenses/.
在文件 arith_seqprod.c 第 24 行定义.
引用了 LMMP_MIN, lmmp_param_assert, lmmp_pow_1_size_(), n , 以及 t.
函数调用图:计算 [numa,na] 在 B^n 下的逆元
| dst | 结果指针(长度为 n 个limb) |
| numa | 待求逆元指针(长度为 na 个limb) |
| na | 待求逆元的 limb 长度 |
| n | 结果的 limb 长度 |
计算 [numa,2] 在 B^2 下的逆元
| numa | 待求逆元指针(长度为 2 个limb) |
| dst | 结果指针(长度为 2 个limb) |
在文件 binvert_1.c 第 56 行定义.
引用了 _umul64to128_(), a0, a1, k, lmmp_binvert_ulong_(), lmmp_param_assert, n, t , 以及 xn.
被这些函数引用 lmmp_binvert_3_(), lmmp_binvert_4_(), lmmp_binvert_n_dc_(), lmmp_binvert_unbalanced_2_() , 以及 lmmp_divexact_().
函数调用图:
这是这个函数的调用关系图:计算 [numa,3] 在 B^3 下的逆元
| numa | 待求逆元指针(长度为 3 个limb) |
| dst | 结果指针(长度为 3 个limb) |
被这些函数引用 lmmp_binvert_n_dc_().
这是这个函数的调用关系图:计算 [numa,4] 在 B^4 下的逆元
| numa | 待求逆元指针(长度为 4 个limb) |
| dst | 结果指针(长度为 4 个limb) |
被这些函数引用 lmmp_binvert_n_dc_().
这是这个函数的调用关系图:计算 [numa,n] 在 B^n 下的逆元
| numa | 待求逆元指针(长度为 n 个limb) |
| dst | 结果指针(长度为 n 个limb) |
| n | 结果的 limb 长度 |
| tp | 临时工作区指针(长度为 5*(n+1)/2 个limb) |
被这些函数引用 lmmp_divexact_divide_() , 以及 lmmp_divexact_unbalanced_().
这是这个函数的调用关系图:计算 a 在2^32下的逆元
| a | 待求逆元 |
在文件 binvert_1.c 第 30 行定义.
引用了 binv_tab, lmmp_param_assert , 以及 n.
计算 a 在2^64下的逆元
| a | 待求逆元 |
在文件 binvert_1.c 第 42 行定义.
引用了 binv_tab, lmmp_param_assert , 以及 n.
被这些函数引用 lmmp_binvert_2_(), lmmp_binvert_n_dc_(), lmmp_binvert_unbalanced_1_(), lmmp_divexact_(), lmmp_is_prime_notrial_() , 以及 lmmp_powmod_ulong_().
这是这个函数的调用关系图:计算 [numa,na] 在 B^n 下的逆元
| dst | 结果指针(长度为 n 个limb) |
| numa | 待求逆元指针(长度为 na 个limb) |
| na | 待求逆元的 limb 长度 |
| n | 结果的 limb 长度 |
| tp | 临时工作区指针(长度为 (9*na+5)/2 个limb) |
计算 a 在 B^n 下的逆元
| dst | 结果指针(长度为 n 个limb) |
| a | 待求逆元 |
| n | 结果的 limb 长度 |
被这些函数引用 lmmp_binvert_().
这是这个函数的调用关系图:计算 [numa,2] 在 B^n 下的逆元
| dst | 结果指针(长度为 n 个limb) |
| numa | 待求逆元指针(长度为 2 个limb) |
| n | 结果的 limb 长度 |
被这些函数引用 lmmp_binvert_().
这是这个函数的调用关系图:计算算数立方根 floor(cbrt(a0+a1*B+a2*B^2))
| a0 | 低位 limb |
| a1 | 中位 limb |
| a2 | 高位 limb |
引用了 a0, a1, a2, LIMB_MAX, lmmp_cbrtapprox_3_(), lmmp_cmp_(), lmmp_cube_3_(), lmmp_param_assert, n , 以及 t.
函数调用图:计算算数立方根 floor(cbrt([numa,na]))
| dst | 结果指针(长度为 2 个limb) |
| numa | 被开方数指针 |
| na | 被开方数的 limb 长度 |
引用了 LIMB_MAX, lmmp_cbrtapprox_6_(), lmmp_cmp_(), lmmp_cube_(), n , 以及 t.
函数调用图:计算算数立方根 floor(cbrt(n))
| n | 被开方数 |
引用了 coeff, factor_table, lmmp_param_assert , 以及 n.
被这些函数引用 lmmp_cbrt_ulong_().
这是这个函数的调用关系图:计算算数立方根 floor(cbrt(n))
| n | 被开方数 |
引用了 lmmp_cbrt_chebyshev_(), lmmp_cbrt_estimate() , 以及 n.
被这些函数引用 lmmp_nthroot_ulong_().
函数调用图:
这是这个函数的调用关系图:计算近似立方根 floor(cbrt(a0+a1*B+a2*B^2))-[0|1]
| a0 | 低位 limb |
| a1 | 中位 limb |
| a2 | 高位 limb |
引用了 a0, a1, a2, exp2_fixed_64(), LIMB_BITS, LIMB_MAX, lmmp_debug_assert, lmmp_div_1_(), lmmp_inc, lmmp_limb_bits_, lmmp_param_assert, log2_fixed_64() , 以及 n.
被这些函数引用 lmmp_cbrt_3_().
函数调用图:
这是这个函数的调用关系图:计算近似立方根 floor(cbrt([numa,na]))-[0|1]
| dst | 结果指针(长度为 2 个limb) |
| numa | 被开方数指针 |
| na | 被开方数的 limb 长度 |
引用了 exp2_fixed_128(), LIMB_BITS, LIMB_MAX, lmmp_debug_assert, lmmp_div_1_(), lmmp_inc, lmmp_limb_bits_, lmmp_param_assert, log2_fixed_128(), n , 以及 t.
被这些函数引用 lmmp_cbrt_6_().
函数调用图:
这是这个函数的调用关系图:精确除法([dst,nn]=[np,nn]/[dp,dn],且余数必须为0)
| dst | 结果指针(长度为 nn-dn+1 个limb) |
| np | 被除数指针(长度为 nn 个limb) |
| nn | 被除数的 limb 长度 |
| dp | 除数指针(长度为 dn 个limb) |
| dn | 结除数的 limb 长度 |
被这些函数引用 lmmp_odd_nCr_div_().
这是这个函数的调用关系图:精确除法([dst,nn]=[np,nn]/d,且余数必须为0)
| dst | 结果指针(长度为 nn 个limb) |
| np | 被除数指针(长度为 nn 个limb) |
| nn | 被除数的 limb 长度 |
| d | 除数 |
| dinv | 除数的逆元(d*dinv==1 mod 2^64) |
精确除法([dst,nn]=[np,nn]/d,且余数必须为0)
This file is part of LAMMP.
LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY.
See https://www.gnu.org/licenses/.
在文件 divexact.c 第 24 行定义.
引用了 _umul64to128_(), c, l, lmmp_debug_assert, lmmp_param_assert, lo, n , 以及 s.
被这些函数引用 lmmp_divexact_().
函数调用图:
这是这个函数的调用关系图:精确除法([dst,nn]=[np,nn]/[dp,2],且余数必须为0)
| dst | 结果指针(长度为 nn-1 个limb) |
| np | 被除数指针(长度为 nn 个limb) |
| nn | 被除数的 limb 长度 |
| dp | 除数指针(长度为 2 个limb) |
| dinv | 除数的逆元指针(长度为 2 个limb) |
| void lmmp_divexact_basecase_ | ( | mp_ptr | dst, |
| mp_ptr | np, | ||
| mp_size_t | nn, | ||
| mp_srcptr | dp, | ||
| mp_size_t | dn, | ||
| mp_limb_t | dinv | ||
| ) |
精确除法([dst,nn]=[np,nn]/[dp,dn],且余数必须为0),朴素算法
| dst | 结果指针(长度为 nn-dn+1 个limb) |
| np | 被除数指针(长度为 nn 个limb),将会被覆写为全零 |
| nn | 被除数的 limb 长度 |
| dp | 除数指针(长度为 dn 个limb) |
| dn | 结除数的 limb 长度 |
| dinv | 除数低位dp[0]关于B的逆元 |
精确除法([dst,nn]=[np,nn]/[dp,dn],且余数必须为0),分治算法
| dst | 结果指针(长度为 nn-dn+1 个limb) |
| np | 被除数指针(长度为 nn 个limb) |
| nn | 被除数的 limb 长度 |
| dp | 除数指针(长度为 dn 个limb) |
| dn | 结除数的 limb 长度 |
| void lmmp_divexact_unbalanced_ | ( | mp_ptr | dst, |
| mp_srcptr | np, | ||
| mp_size_t | nn, | ||
| mp_srcptr | dp, | ||
| mp_size_t | dn, | ||
| mp_ptr | dinv | ||
| ) |
精确除法([dst,nn]=[np,nn]/[dp,dn],且余数必须为0)
| dst | 结果指针(长度为 nn-dn+1 个limb) |
| np | 被除数指针(长度为 nn 个limb),将会被修改为全零 |
| nn | 被除数的 limb 长度 |
| dp | 除数指针(长度为 dn 个limb) |
| dn | 结除数的 limb 长度 |
| dinv | 除数[dp,dn]关于B^dn的逆元,若为NULL,则自动计算 |
| mp_size_t lmmp_factorial_ | ( | mp_ptr | dst, |
| mp_bitcnt_t | bits, | ||
| mp_size_t | rn, | ||
| uint | n | ||
| ) |
计算 n! 阶乘
| dst | 结果指针 |
| bits | n! 的2的因子数 |
| rn | 结果指针的 limb 长度 |
| n | 阶乘的阶数 |
| mp_size_t lmmp_factorial_size_ | ( | uint | n, |
| mp_bitcnt_t * | bits | ||
| ) |
计算 n! 阶乘的 limb 缓冲区长度
| n | 阶乘的阶数 |
| bits | 被修改为 n! 的2的因子数 |
被这些函数引用 lmmp_odd_nCr_uint_().
这是这个函数的调用关系图:计算两个无符号整数的最大公约数
| u | 第一个无符号整数 |
| v | 第二个无符号整数 |
计算两个无符号整数的最大公约数
This file is part of LAMMP.
LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY.
See https://www.gnu.org/licenses/.
引用了 k, lmmp_param_assert, lmmp_tailing_zeros_ , 以及 n.
被这些函数引用 lmmp_gcd_1_(), lmmp_gcd_22_() , 以及 lmmp_gcd_lehmer_().
这是这个函数的调用关系图:计算两个无符号整数的最大公约数
| up | 第一个无符号整数指针 |
| un | 第一个无符号整数的 limb 长度 |
| v | 第二个无符号整数 |
引用了 lmmp_gcd_11_(), lmmp_mod_1_(), lmmp_param_assert , 以及 n.
被这些函数引用 lmmp_gcd_lehmer_().
函数调用图:
这是这个函数的调用关系图:计算两个无符号整数的最大公约数
| up | 第一个无符号整数指针,长度为 2 |
| vp | 第二个无符号整数指针,长度为 2 |
| dst | 结果指针(长度为 2,两个 limb 都会进行写入,即使最高位可能为0) |
计算两个无符号整数的最大公约数
This file is part of LAMMP.
LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY.
See https://www.gnu.org/licenses/.
引用了 _u128cmp, _u128lshl, _u128lshr, _u128sub, _u128sub64, k, lmmp_gcd_11_(), lmmp_param_assert, lmmp_tailing_zeros_ , 以及 n.
被这些函数引用 lmmp_gcd_2_().
函数调用图:
这是这个函数的调用关系图:计算两个无符号整数的最大公约数
| up | 第一个无符号整数指针 |
| un | 第一个无符号整数的 limb 长度 |
| vp | 第二个无符号整数指针,长度为 2 |
| dst | 结果指针(长度至少为 2,两个 limb 都会进行写入,即使最高位可能为0) |
引用了 lmmp_gcd_22_(), lmmp_mod_2_(), lmmp_param_assert , 以及 n.
函数调用图:计算两个无符号整数的最大公约数(不建议使用此算法,更高版本可能被彻底弃用)
| dst | 结果指针(长度至少为 min(un,vn)) |
| up | 第一个无符号整数指针 |
| un | 第一个无符号整数的 limb 长度 |
| vp | 第二个无符号整数指针 |
| vn | 第二个无符号整数的 limb 长度 |
计算两个无符号整数的最大公约数(不建议使用此算法,更高版本可能被彻底弃用)
This file is part of LAMMP.
LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY.
See https://www.gnu.org/licenses/.
在文件 gcd_basecase.c 第 20 行定义.
引用了 an, bn, lmmp_cmp_(), lmmp_copy, lmmp_div_(), lmmp_param_assert, LMMP_SWAP, n, TALLOC_TYPE, TEMP_DECL , 以及 TEMP_FREE.
函数调用图:计算两个无符号整数的最大公约数(Lehmer算法)
| dst | 结果指针(长度至少为 min(un,vn)) |
| up | 第一个无符号整数指针 |
| un | 第一个无符号整数的 limb 长度 |
| vp | 第二个无符号整数指针 |
| vn | 第二个无符号整数的 limb 长度 |
在文件 gcd_lehmer.c 第 242 行定义.
引用了 an, BALLOC_TYPE, bn, lmmp_cmp_(), lmmp_copy, lmmp_div_(), lmmp_gcd_11_(), lmmp_gcd_1_(), lmmp_gcd_lehmer_step_(), lmmp_lehmer_extract_(), lmmp_lehmer_mul_(), lmmp_param_assert, LMMP_SWAP, n, TEMP_B_DECL , 以及 TEMP_B_FREE.
函数调用图:| mp_size_t lmmp_hyperfac_ | ( | mp_ptr | dst, |
| mp_bitcnt_t | bits, | ||
| mp_size_t | rn, | ||
| ushort | n | ||
| ) |
计算hyper阶乘(k^k累乘至n)
| dst | 结果指针 |
| bits | hyper阶乘的2的因子数 |
| rn | 结果指针的 limb 长度 |
| n | hyper阶乘的阶数 |
| mp_size_t lmmp_hyperfac_size_ | ( | ushort | n, |
| mp_bitcnt_t * | bits | ||
| ) |
计算hyper阶乘的 limb 缓冲区长度
| n | hyper阶乘的阶数 |
| bits | 被修改为 hyper阶乘的2的因子数 |
判断素数(无试除法)
| n | 待判断的数(建议为极有可能为素数的数) |
在文件 is_prime_ulong.c 第 293 行定义.
引用了 dj_base49, dj_base64, lmmp_binvert_ulong_(), lmmp_param_assert, miller_rabin_63(), miller_rabin_64(), MONT63_MAX, mont63_R2(), mont64_R2(), n, t, to_mont63() , 以及 to_mont64().
被这些函数引用 lmmp_is_prime_ulong_(), lmmp_next_prime_ulong_() , 以及 lmmp_prev_prime_ulong_().
函数调用图:
这是这个函数的调用关系图:判断素数
| n | 待判断的数 |
判断素数
Hashed 2-bases for n < 684630005672341 (slightly more than 2^49) Hashed 3-bases for n < 2^64
Based on Steve Worley's 2^32 example: http://www.mersenneforum.org/showthread.php?t=12209 With a 3-base encoding idea from Bradley Berg.
Copyright 2014, Dana Jacobsen dana@.nosp@m.acm..nosp@m.org
在文件 is_prime_ulong.c 第 259 行定义.
引用了 _udiv64_gen(), dj_base49, lmmp_is_prime_table_(), miller_rabin_32(), n, t , 以及 trial_div35711().
函数调用图:判断素数
| n | 待判断的数 |
在文件 is_prime_ulong.c 第 381 行定义.
引用了 lmmp_is_prime_notrial_(), lmmp_is_prime_table_(), n , 以及 trial_div35711().
函数调用图:计算两个无符号整数的乘积,对mod取模,商放入 q 中
| a | 第一个无符号整数 |
| b | 第二个无符号整数 |
| q | 商的结果指针 |
| mod | 取模数 |
计算多项式系数
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| n | r[i] 的总和 |
| r | 需要计算的系数的数组 |
| m | 系数的个数 |
计算多项式系数的 limb 缓冲区长度
| r | 需要计算的系数的数组 |
| m | 系数的个数 |
| n | 输出变量,将会被修改为 r[i] 的总和,即r1+r2+...+rm |
计算 nCr 组合数 ( nCr = n! / (r!(n-r)!) )
| dst | 结果指针 |
| bits | nCr 的2的因子数 |
| rn | 结果指针的 limb 长度 |
| n | 组合数的总数 |
| r | 组合数的选择数 |
| mp_size_t lmmp_nCr_size_ | ( | uint | n, |
| uint | r, | ||
| mp_bitcnt_t * | bits | ||
| ) |
计算 nCr 组合数的 limb 缓冲区长度
| n | 组合数的总数 |
| r | 组合数的选择数 |
| bits | 被修改为 nCr 的2的因子数 |
大于n的下一个素数
| n | 起始点(不含) |
在文件 is_prime_ulong.c 第 455 行定义.
引用了 lmmp_is_prime_notrial_(), lmmp_prime_cnt16_(), MP_ULONG_MAX, n, prime_short_table, PRIME_SHORT_TABLE_SIZE, trial_div13(), trial_div17(), trial_div19(), trial_div23(), trial_div29(), trial_div31(), trial_div35711(), trial_div37(), trial_div41() , 以及 ULONG_PRIME_MAX.
函数调用图:计算 nPr 排列数 ( nPr = n! / (n-r)! )
| dst | 结果指针 |
| bits | nPr 的2的因子数 |
| rn | 结果指针的 limb 长度 |
| n | 排列数的总数 |
| r | 排列数的选择数 |
| mp_size_t lmmp_nPr_size_ | ( | ulong | n, |
| ulong | r, | ||
| mp_bitcnt_t * | bits | ||
| ) |
计算 nPr 排列数的 limb 缓冲区长度
| n | 排列数的总数 |
| r | 排列数的选择数 |
| bits | 被修改为 nPr 的2的因子数 |
被这些函数引用 lmmp_odd_nCr_uint_() , 以及 pow_nPr_().
这是这个函数的调用关系图:计算 floor(n^(1/root))
| n | 被开方数 |
| root | 开方次数 |
引用了 inv_table, LIMB_BITS, lmmp_cbrt_ulong_(), lmmp_debug_assert, lmmp_sqrt_ulong_(), max_base, n , 以及 pow_n().
函数调用图:计算 n! 阶乘的奇数部分
| dst | 结果指针 |
| rn | 结果指针的 limb 长度(factorial_size_ 函数的返回值 - bits/LIMB_BITS) |
| n | 阶乘的阶数 |
被这些函数引用 lmmp_2factorial_() , 以及 lmmp_odd_factorial_().
这是这个函数的调用关系图:计算 nCr 组合数的奇数部分
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| n | 组合数的总数 |
| r | 组合数的选择数 |
计算 nCr 组合数的奇数部分
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| n | 组合数的总数 |
| r | 组合数的选择数 |
计算 nPr 排列数的奇数部分
| dst | 结果指针 |
| rn | 结果指针的 limb 长度(nPr_size_ 函数的返回值 - bits/LIMB_BITS) |
| n | 排列数的总数 |
| r | 排列数的选择数 |
被这些函数引用 _odd_nPr_().
这是这个函数的调用关系图:计算 nPr 排列数的奇数部分
| dst | 结果指针 |
| rn | 结果指针的 limb 长度(nPr_size_ 函数的返回值 - bits/LIMB_BITS) |
| n | 排列数的总数 |
| r | 排列数的选择数 |
计算 nPr 排列数的奇数部分
| dst | 结果指针 |
| rn | 结果指针的 limb 长度(nPr_size_ 函数的返回值 - bits/LIMB_BITS) |
| n | 排列数的总数 |
| r | 排列数的选择数 |
被这些函数引用 _odd_nPr_(), lmmp_2factorial_(), lmmp_factorial_(), lmmp_odd_factorial_(), lmmp_odd_multinomial_ushort_() , 以及 lmmp_odd_nCr_ushort_().
这是这个函数的调用关系图:计算大整数幂 [dst,rn] = [base,n] ^ exp
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| base | 底数指针 |
| n | 底数指针的 limb 长度 |
| exp | 指数 |
计算幂次方 [dst,rn] = [base,1] ^ exp
| dst | 结果指针 |
| base | 底数 |
| exp | 指数 |
被这些函数引用 lmmp_pow_().
这是这个函数的调用关系图:计算幂次方需要的limb缓冲区长度 base ^ exp
| base | 底数 |
| exp | 指数 |
计算幂次方需要的limb缓冲区长度 base ^ exp
This file is part of LAMMP.
LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY.
See https://www.gnu.org/licenses/.
引用了 LIMB_BITS, lmmp_limb_bits_, lmmp_param_assert, MP_UINT_MAX, n , 以及 xlog2n_ceil().
被这些函数引用 lmmp_arith_seqprod_size_(), lmmp_nCr_size_(), lmmp_nPr_size_(), lmmp_pow_size_() , 以及 pow_nPr_().
函数调用图:
这是这个函数的调用关系图:计算奇数次幂算法 [dst,rn] = [base,n] ^ exp
| dst | 结果指针 |
| rn | 结果指针的 limb 缓冲区长度 |
| base | 底数指针 |
| n | 底数指针的 limb 长度 |
| exp | 指数 |
被这些函数引用 lmmp_pow_().
这是这个函数的调用关系图:计算幂次方需要的limb缓冲区长度 [base,n] ^ exp
| base | 底数指针 |
| n | 底数 limb 长度 |
| exp | 指数 |
引用了 LIMB_BITS, lmmp_limb_bits_, lmmp_param_assert, lmmp_pow_1_size_(), MP_UINT_MAX, n , 以及 xlog2n_ceil().
被这些函数引用 lmmp_pow_().
函数调用图:
这是这个函数的调用关系图:计算幂次方2比特窗口快速幂算法 [dst,rn] = [base,n] ^ exp
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| base | 底数指针 |
| n | 底数指针的 limb 长度 |
| exp | 指数 |
被这些函数引用 lmmp_pow_().
这是这个函数的调用关系图:计算 base^exp 对 mod 取模
| base | 底数 |
| exp | 指数 |
| mod | 模数 |
在文件 is_prime_ulong.c 第 108 行定义.
引用了 _udiv64_gen(), _udiv64by64_q_preinv(), lmmp_param_assert , 以及 n.
被这些函数引用 lmmp_powmod_ulong_().
函数调用图:
这是这个函数的调用关系图:计算 base^exp 对 mod 取模
| base | 底数 |
| exp | 指数 |
| mod | 模数 |
在文件 is_prime_ulong.c 第 131 行定义.
引用了 from_mont63(), from_mont64(), lmmp_binvert_ulong_(), lmmp_powmod_uint_(), MONT63_MAX, mont63_mul(), mont63_R2(), mont64_mul(), mont64_R2(), MP_UINT_MAX, n, to_mont63() , 以及 to_mont64().
函数调用图:小于等于n的上一个素数
| n | 起始点(含) |
在文件 is_prime_ulong.c 第 485 行定义.
引用了 lmmp_is_prime_notrial_(), lmmp_prime_cnt16_(), n, prime_short_table, PRIME_SHORT_TABLE_N, trial_div13(), trial_div17(), trial_div19(), trial_div23(), trial_div29(), trial_div31(), trial_div35711(), trial_div37(), trial_div41() , 以及 ULONG_PRIME_MIN.
函数调用图:计算质数阶乘(不超过n的质数累乘)
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| n | 质数阶乘的阶数 |
计算质数阶乘的 limb 缓冲区长度
| n | 质数阶乘的阶数 |
在文件 factorial_extra.c 第 435 行定义.
除去[np,nn]中的[dp,dn]的因子
| np | 被除数指针,将会被修改为除去因子后的数 |
| nn | 被除数指针的 limb 长度,将会被修改除去因子后的长度 |
| dp | 除数指针 |
| dn | 除数指针的 limb 长度 |
计算算术平方根 floor(sqrt(a))
| a | 被开方数 |
计算算术平方根 floor(sqrt(a))
This file is part of LAMMP.
LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY.
See https://www.gnu.org/licenses/.
引用了 n.
被这些函数引用 lmmp_nthroot_ulong_().
这是这个函数的调用关系图:| mp_size_t lmmp_superfac_ | ( | mp_ptr | dst, |
| mp_bitcnt_t | bits, | ||
| mp_size_t | rn, | ||
| ushort | n | ||
| ) |
计算super阶乘(k!累乘至n)
| dst | 结果指针 |
| bits | super阶乘的2的因子数 |
| rn | 结果指针的 limb 长度 |
| n | super阶乘的阶数 |
| mp_size_t lmmp_superfac_size_ | ( | ushort | n, |
| mp_bitcnt_t * | bits | ||
| ) |
计算super阶乘的 limb 缓冲区长度
| n | super阶乘的阶数 |
| bits | 被修改为 super阶乘的2的因子数 |
试除法
| num | 被除数 |
| nn | 被除数的 limb 长度 |
| N | 试除法尝试的质数最大值 |
| rn | 结果指针的 limb 长度 |
计算幂次方 [dst,rn] = [base,1] ^ exp
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| base | 底数(16位无符号整数) |
| exp | 指数 |
被这些函数引用 _odd_pow_().
这是这个函数的调用关系图:计算幂次方 [dst,rn] = [base,1] ^ exp
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| base | 底数(32位无符号整数) |
| exp | 指数 |
被这些函数引用 _odd_pow_().
这是这个函数的调用关系图:计算幂次方 [dst,rn] = [base,1] ^ exp
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| base | 底数(4位无符号整数) |
| exp | 指数 |
被这些函数引用 _odd_pow_().
这是这个函数的调用关系图:计算幂次方 [dst,rn] = [base,1] ^ exp
| dst | 结果指针 |
| rn | 结果指针的 limb 长度 |
| base | 底数(64位无符号整数) |
| exp | 指数 |