16#include "../../../include/lammp/numth.h"
19#define MASK48 (0xFFFFFFFFFFFF)
21#define B1 (LIMB_BITS / 4)
25#define M1 ((1ULL << B1) - 1)
26#define M2 ((1ULL << B2) - 1)
27#define M3 ((1ULL << B3) - 1)
29#define LOW0(n) ((n) & M3)
30#define HIGH0(n) ((n) >> B3)
32#define LOW1(n) (((n) & M2) << B1)
33#define HIGH1(n) ((n) >> B2)
35#define LOW2(n) (((n) & M1) << B2)
36#define HIGH2(n) ((n) >> B1)
38#define PARTS0(n) (LOW0(n) + HIGH0(n))
39#define PARTS1(n) (LOW1(n) + HIGH1(n))
40#define PARTS2(n) (LOW2(n) + HIGH2(n))
43#define ADD(c, a, val) \
45 mp_limb_t new_a = (a) + (val); \
110 return r == 0 || r == 1 || r == 4 || r == 7;
114 return r == 0 || r == 1 || r == 4;
118 return r == 0 || r == 1 || r == 2 || r == 4;
122 return r == 0 || r == 1 || r == 3 || r == 4 || r == 9 || r == 10 || r == 12;
126 return r == 0 || r == 1 || r == 2 || r == 4 || r == 8 || r == 9 || r == 13 || r == 15 || r == 16;
130 return r == 0 || r == 1 || r == 2 || r == 3 || r == 4 || r == 6 || r == 8 || r == 9 || r == 11 || r == 12 ||
131 r == 16 || r == 18 || r == 22 || r == 24 || r == 25 || r == 27 || r == 31 || r == 32 || r == 33 || r == 35 ||
132 r == 36 || r == 43 || r == 44 || r == 47 || r == 48 || r == 49 || r == 50 || r == 53 || r == 54 || r == 61 ||
133 r == 62 || r == 64 || r == 65 || r == 66 || r == 70 || r == 72 || r == 73 || r == 75 || r == 79 || r == 81 ||
134 r == 85 || r == 86 || r == 88 || r == 89 || r == 91 || r == 93 || r == 94 || r == 95 || r == 96;
138 static const uint64_t
p241[] = {0x3C67A3116B15977F, 0x2FD21C174C8FA909, 0x98F24257C4CBA0E1, 0x0001FBA6A35A2317};
146 static const uint64_t
p257[] = {0x7E16541DE6E7AB17, 0x1F76811C93128359, 0x6B052324E205BBE3, 0xA3579D9EE0A9A1FA,
155 static const uint64_t
p673[] = {0x85F744B13FA573DF, 0xC231D5979ABA4F21, 0xE944C76E98DD0C01, 0xD20E0F2BD993E915,
156 0x616259FB225208AB, 0x7E691A18F8B7B47C, 0x53C1C12F54412913, 0xDB8C8A5EA25F266F,
157 0xA6AE310E00C2EC65, 0x348BBE8613C97567, 0x00000001EF3A97F2};
165 static const uint64_t
p256[] = {0x0202021202030213, 0x0202021202020213, 0x0202021202030212, 0x0202021202020212};
const mp_limb_t * mp_srcptr
#define lmmp_param_assert(x)
uint8_t uchar
Copyright (C) 2026 HJimmyK(Jericho Knox)
static bool is_perfsqr_p7(uchar r)
#define MASK48
Copyright (C) 2026 HJimmyK(Jericho Knox)
static bool is_perfsqr_p241(ushort r)
bool lmmp_perfsqr_filter_1_(mp_limb_t p)
非完全平方数过滤器
static bool is_perfsqr_p17(uchar r)
static bool is_perfsqr_p256(uchar r)
static bool is_perfsqr_p673(ushort r)
static bool is_perfsqr_p13(uchar r)
static bool is_perfsqr_p257(ushort r)
static bool is_perfsqr_p9(uchar r)
mp_limb_t lmmp_mod_2p48sub1_(mp_srcptr p, mp_size_t n)
计算 [p,n] % 2^48-1
static bool is_perfsqr_p5(uchar r)
static bool is_perfsqr_p97(uchar r)
bool lmmp_perfsqr_filter_(mp_srcptr p, mp_size_t n)
非完全平方数过滤器