7#include "../../../include/lammp/numth.h"
8#include "../../../include/lammp/lmmpn.h"
9#include "../../../include/lammp/impl/tmp_alloc.h"
46 while (divn > 0 && qp[divn - 1] == 0) --divn;
80 if (qn =
try_div_(qp, rp, divp, divn, pd_pow[i - 1], pn_pow[i - 1])) {
85 pn_pow[i] = 2 * pn_pow[i - 1];
86 if (divn < pn_pow[i]) {
91 lmmp_sqr_(prod, pd_pow[i - 1], pn_pow[i - 1]);
92 pn_pow[i] -= (prod[pn_pow[i] - 1] == 0) ? 1 : 0;
98 for (j = i - 1; j > 0; --j) {
99 if (qn =
try_div_(qp, rp, divp, divn, pd_pow[j - 1], pn_pow[j - 1])) {
#define LMMP_SWAP(x, y, type)
#define lmmp_copy(dst, src, n)
const mp_limb_t * mp_srcptr
#define lmmp_param_assert(x)
static int lmmp_cmp_(mp_srcptr numa, mp_srcptr numb, mp_size_t n)
大数比较函数(内联)
void lmmp_sqr_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
大数平方操作 [dst,2*na] = [numa,na]^2
void lmmp_div_(mp_ptr dstq, mp_ptr dstr, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
大数除法和取模操作
static int lmmp_zero_q_(mp_srcptr p, mp_size_t n)
大数判零函数(内联)
mp_size_t lmmp_remove_(mp_ptr np, mp_size_t *nn, mp_srcptr dp, mp_size_t dn)
除去[np,nn]中的[dp,dn]的因子
static mp_size_t try_div_(mp_ptr qp, mp_ptr rp, mp_srcptr divp, mp_size_t divn, mp_srcptr numb, mp_size_t nb)
qp 为商,rp 为余数,divp 为被除数,divn 为被除数长度,numb 为除数,nb 为除数长度 如果无法整除,则返回0,否则返回除数 qp 的长度
#define TALLOC_TYPE(n, type)