16#include "../../../include/lammp/impl/inlines.h"
17#include "../../../include/lammp/impl/lglg.h"
18#include "../../../include/lammp/impl/longlong.h"
19#include "../../../include/lammp/impl/mparam.h"
20#include "../../../include/lammp/impl/tmp_alloc.h"
21#include "../../../include/lammp/lmmpn.h"
22#include "../../../include/lammp/numth.h"
30 }
else if (
exp <= 2) {
89 }
else if (
exp == 2) {
139 }
else if (
exp == 2) {
191 for (;
i <=
tz;
i += 2) {
211 for (;
i <=
tz;
i += 2) {
#define lmmp_limb_popcnt_
#define lmmp_tailing_zeros_
static uint64_t xlog2n_ceil(uint32_t x, uint32_t n)
计算x*log2(n)的ceil值
#define lmmp_copy(dst, src, n)
#define lmmp_zero(dst, n)
const mp_limb_t * mp_srcptr
#define lmmp_param_assert(x)
mp_limb_t lmmp_mul_1_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_limb_t x)
大数乘以单limb操作 [dst,na] = [numa,na] * x
#define POW_WIN2_EXP_THRESHOLD
#define POW_1_EXP_THRESHOLD
#define POW_WIN2_N_THRESHOLD
mp_size_t lmmp_pow_win2_(mp_ptr dst, mp_size_t rn, mp_srcptr base, mp_size_t n, ulong exp)
计算幂次方2比特窗口快速幂算法 [dst,rn] = [base,n] ^ exp
mp_size_t lmmp_pow_1_(mp_ptr dst, mp_size_t rn, mp_limb_t base, ulong exp)
计算幂次方 [dst,rn] = [base,1] ^ exp
mp_size_t lmmp_pow_basecase_(mp_ptr dst, mp_size_t rn, mp_srcptr base, mp_size_t n, ulong exp)
计算奇数次幂算法 [dst,rn] = [base,n] ^ exp
mp_size_t lmmp_pow_1_size_(mp_limb_t base, ulong exp)
Copyright (C) 2026 HJimmyK(Jericho Knox)
mp_size_t lmmp_pow_(mp_ptr restrict dst, mp_size_t rn, mp_srcptr restrict base, mp_size_t n, ulong exp)
mp_size_t lmmp_pow_size_(mp_srcptr base, mp_size_t n, ulong exp)
计算幂次方需要的limb缓冲区长度 [base,n] ^ exp
#define TALLOC_TYPE(n, type)