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/mparam.h"
20#include "../../../include/lammp/impl/prime_table.h"
21#include "../../../include/lammp/impl/tmp_alloc.h"
22#include "../../../include/lammp/lmmpn.h"
23#include "../../../include/lammp/numth.h"
26#define MUL(dst, ap, an, bp, bn) \
28 lmmp_mul_(dst, ap, an, bp, bn); \
30 lmmp_mul_(dst, bp, bn, ap, an)
33#define mul_1(dst, rn, v) \
35 mp_limb_t _c_ = lmmp_mul_1_(dst, dst, rn, v); \
91#define MAX_T 0xfffffffffffff
120#define MAX_T 0xffffffffffff
147 tn -=
tp2[tn - 1] == 0;
236 while (
cache.is_end == 0) {
253 2027025, 34459425, 654729075,
254 13749310575, 316234143225,
255 7905853580625, 213458046676875,
256 6190283353629375, 191898783962510625,
257 6332659870762850625};
317 if (
n == 0 ||
n == 1) {
322 const double logA = 0.24875447703378426;
323 const double log2 = 0.69314718055994531;
334 if (
n == 0 ||
n == 1) {
341 const double log2 = 0.69314718055994531;
342 const double log_2pi = 1.83787706640934548;
438 const double log2 = 0.69314718055994531;
458#define MAX_T 0xffffffffffff
490 while (
cache.is_end == 0) {
mp_size_t lmmp_elem_mul_ulong_(mp_ptr dst, const ulongp limbs, mp_size_t n, mp_ptr tp)
计算limbs数组的累乘积
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_copy(dst, src, n)
#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 FACTORS_MUL_N_THRESHOLD
mp_size_t lmmp_odd_factorial_uint_(mp_ptr dst, mp_size_t rn, uint n)
计算 n! 阶乘的奇数部分
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 SALLOC_TYPE(n, type)
#define TALLOC_TYPE(n, type)
#define BALLOC_TYPE(n, type)