LAMMP 4.1.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
gcd_1.c
浏览该文件的文档.
1/*
2 * LAMMP - Copyright (C) 2025-2026 HJimmyK(Jericho Knox)
3 * This file is part of lammp, under the GNU LGPL v2 license.
4 * See LICENSE in the project root for the full license text.
5 */
6
7#include "../../../include/lammp/numth.h"
8#include "../../../include/lammp/lmmpn.h"
9
11 lmmp_param_assert(u > 0 && v > 0);
12 int count, k;
13 k = lmmp_tailing_zeros_(u | v);
14 u >>= lmmp_tailing_zeros_(u);
15 v >>= lmmp_tailing_zeros_(v);
16 while (u != v) {
17 if (u > v) {
18 u -= v;
19 count = lmmp_tailing_zeros_(u);
20 u >>= count;
21 } else {
22 v -= u;
23 count = lmmp_tailing_zeros_(v);
24 v >>= count;
25 }
26 }
27 return u << k;
28}
29
31 lmmp_param_assert(un > 0);
32 lmmp_param_assert(vlimb > 0);
33 mp_limb_t ulimb;
34 if (un == 1) {
35 ulimb = up[0];
36 }
37 else {
38 ulimb = lmmp_mod_1_(up, un, vlimb);
39 }
40 if (ulimb == 0)
41 return vlimb;
42 else
43 return lmmp_gcd_11_(ulimb, vlimb);
44}
#define k
mp_limb_t lmmp_gcd_1_(mp_srcptr up, mp_size_t un, mp_limb_t vlimb)
计算两个无符号整数的最大公约数
Definition gcd_1.c:30
mp_limb_t lmmp_gcd_11_(mp_limb_t u, mp_limb_t v)
计算 [numa,na] 在B^n 下的逆元
Definition gcd_1.c:10
uint64_t mp_size_t
Definition lmmp.h:212
const mp_limb_t * mp_srcptr
Definition lmmp.h:216
uint64_t mp_limb_t
Definition lmmp.h:211
#define lmmp_param_assert(x)
Definition lmmp.h:398
int lmmp_tailing_zeros_(mp_limb_t x)
计算一个单精度数(limb)中末尾零的个数
Definition tiny.c:54
mp_limb_t lmmp_mod_1_(mp_srcptr numa, mp_size_t na, mp_limb_t x)
单精度数取余
Definition div.c:20