16#include "../../../include/lammp/impl/ele_mul.h"
17#include "../../../include/lammp/impl/inlines.h"
18#include "../../../include/lammp/impl/lglg.h"
19#include "../../../include/lammp/impl/longlong.h"
20#include "../../../include/lammp/impl/mparam.h"
21#include "../../../include/lammp/impl/prime_table.h"
50 for (
i = 0;
i <
m; ++
i) {
138 while (
cache.is_end == 0) {
152#define MULTINOMIAL_SHORT_LIMIT (0xffff)
153#define MULTINOMIAL_INT_LIMIT (0xffffffff)
157 for (
uint j = 0; j <
m; ++j) {
173 rn -=
dst[
rn - 1] == 0 ? 1 : 0;
mp_size_t lmmp_factors_mul_ushort_(mp_ptr dst, mp_size_t rn, fac_ptr fac, ushort nfactors)
计算因子的累乘,并将结果放入dst中
mp_size_t lmmp_factors_mul_(mp_ptr dst, mp_size_t rn, fac_ptr fac, uint nfactors)
计算因子的累乘,并将结果放入dst中
#define lmmp_limb_popcnt_
static uint64_t log2_fac_ceil(uint32_t n)
计算 log2(n!)的ceil值
static uint64_t log2_fac_floor(uint32_t n)
计算 log2(n!)的floor值
#define lmmp_zero(dst, n)
#define lmmp_debug_assert(x)
#define lmmp_param_assert(x)
mp_limb_t lmmp_shl_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_size_t shl)
大数左移操作 [dst,na] = [numa,na]<<shl,dst的低shl位填充0
#define _udiv32by32_q_preinv(q, n0, dinv)
#define ODD_FACTORIAL_SIZE
static mp_size_t lmmp_odd_multinomial_ushort_(mp_ptr restrict dst, mp_size_t rn, uint n, const uintp restrict r, uint m)
static uint factor_size_int(mp_size_t rn, uint n)
static uint count_factors(fac_ptr fac, uint nfactors, uint n, const uintp r, uint m, uint p)
static mp_size_t fac_size_lower(uint n)
Copyright (C) 2026 HJimmyK(Jericho Knox)
static ushort factor_size_short(mp_size_t rn)
mp_size_t lmmp_multinomial_size_(const uintp r, uint m, ulong *restrict n)
#define MULTINOMIAL_SHORT_LIMIT
static mp_size_t lmmp_odd_multinomial_uint_(mp_ptr restrict dst, mp_size_t rn, uint n, const uintp restrict r, uint m)
static mp_size_t fac_size_bigger(uint n)
mp_size_t lmmp_multinomial_(mp_ptr restrict dst, mp_size_t rn, uint n, const uintp restrict r, uint m)
mp_size_t lmmp_odd_nPr_ushort_(mp_ptr dst, mp_size_t rn, ulong n, ulong r)
计算 nPr 排列数的奇数部分
void lmmp_prime_cache_free_(prime_cache_t *cache)
释放素数表缓存
void lmmp_prime_cache_next_(prime_cache_t *cache)
素数表缓存更新(从小到大遍历全局质数表)
static ulong lmmp_prime_size_(ulong n)
估计 n 范围内的素数数量
const ushort prime_short_table[6542]
void lmmp_prime_int_table_init_(uint n)
初始化全局素数表
ushort lmmp_prime_cnt16_(ushort n)
计算小于等于 n 的素数数量
void lmmp_prime_cache_init_(prime_cache_t *cache, uint n)
初始化素数表缓存
#define TALLOC_TYPE(n, type)
#define BALLOC_TYPE(n, type)