arb_sys/
dlog.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [Arb documentation](https://arblib.org/).
4
5use flint_sys::deps::*;
6use flint_sys::nmod_vec::nmod_t;
7use flint_sys::ulong_extras::n_factor_t;
8use libc::{c_int, c_uint};
9
10pub const DLOG_MODPE: c_uint = 0;
11pub const DLOG_CRT: c_uint = 1;
12pub const DLOG_POWER: c_uint = 2;
13pub const DLOG_BSGS: c_uint = 3;
14pub const DLOG_TABLE: c_uint = 4;
15pub const DLOG_23: c_uint = 5;
16pub type _bindgen_ty_22 = c_uint;
17pub type dlog_precomp_ptr = *mut dlog_precomp_struct;
18
19#[repr(C)]
20#[derive(Debug, Copy, Clone)]
21pub struct dlog_1modpe_struct {
22    pub inv1p: mp_limb_t,
23    pub invloga1: mp_limb_t,
24}
25
26pub type dlog_1modpe_t = [dlog_1modpe_struct; 1usize];
27
28#[repr(C)]
29#[derive(Debug, Copy, Clone)]
30pub struct dlog_modpe_struct {
31    pub p: mp_limb_t,
32    pub e: mp_limb_t,
33    pub pe1: mp_limb_t,
34    pub inva: mp_limb_t,
35    pub pe: nmod_t,
36    pub modp: *mut dlog_precomp_struct,
37    pub modpe: dlog_1modpe_t,
38}
39
40pub type dlog_modpe_t = [dlog_modpe_struct; 1usize];
41
42#[repr(C)]
43#[derive(Debug, Copy, Clone)]
44pub struct dlog_table_struct {
45    pub mod_: mp_limb_t,
46    pub table: *mut mp_limb_t,
47}
48
49pub type dlog_table_t = [dlog_table_struct; 1usize];
50
51#[repr(C)]
52#[derive(Debug, Copy, Clone)]
53pub struct apow {
54    pub k: mp_limb_t,
55    pub ak: mp_limb_t,
56}
57
58pub type apow_t = apow;
59
60#[repr(C)]
61#[derive(Debug, Copy, Clone)]
62pub struct dlog_bsgs_struct {
63    pub mod_: nmod_t,
64    pub m: mp_limb_t,
65    pub am: mp_limb_t,
66    pub g: mp_limb_t,
67    pub table: *mut apow_t,
68}
69
70pub type dlog_bsgs_t = [dlog_bsgs_struct; 1usize];
71#[repr(C)]
72#[derive(Debug, Copy, Clone)]
73pub struct dlog_rho_struct {
74    pub a: mp_limb_t,
75    pub n: nmod_t,
76    pub mod_: nmod_t,
77    pub nisprime: c_int,
78}
79
80pub type dlog_rho_t = [dlog_rho_struct; 1usize];
81
82#[repr(C)]
83#[derive(Debug, Copy, Clone)]
84pub struct dlog_crt_struct {
85    pub mod_: nmod_t,
86    pub n: nmod_t,
87    pub num: mp_limb_t,
88    pub expo: *mut mp_limb_t,
89    pub crt_coeffs: *mut mp_limb_t,
90    pub pre: dlog_precomp_ptr,
91}
92
93pub type dlog_crt_t = [dlog_crt_struct; 1usize];
94
95#[repr(C)]
96#[derive(Debug, Copy, Clone)]
97pub struct dlog_power_struct {
98    pub mod_: nmod_t,
99    pub p: mp_limb_t,
100    pub e: mp_limb_t,
101    pub apk: *mut mp_limb_t,
102    pub pre: *mut dlog_precomp_struct,
103}
104
105pub type dlog_power_t = [dlog_power_struct; 1usize];
106pub type dlog_order23_t = [mp_limb_t; 1usize];
107
108#[repr(C)]
109#[derive(Copy, Clone)]
110pub struct dlog_precomp_struct {
111    pub type_: c_int,
112    pub cost: mp_limb_t,
113    pub t: dlog_precomp_struct__bindgen_ty_1,
114}
115
116#[repr(C)]
117#[derive(Copy, Clone)]
118pub union dlog_precomp_struct__bindgen_ty_1 {
119    pub table: dlog_table_t,
120    pub bsgs: dlog_bsgs_t,
121    pub crt: dlog_crt_t,
122    pub power: dlog_power_t,
123    pub modpe: dlog_modpe_t,
124    pub order23: dlog_order23_t,
125}
126
127pub type dlog_precomp_t = [dlog_precomp_struct; 1usize];
128
129extern "C" {
130    pub fn apow_cmp(x: *const apow_t, y: *const apow_t) -> c_int;
131    pub fn dlog_precomp_modpe_init(
132        pre: *mut dlog_precomp_struct,
133        a: mp_limb_t,
134        p: mp_limb_t,
135        e: mp_limb_t,
136        pe: mp_limb_t,
137        num: mp_limb_t,
138    );
139    pub fn dlog_precomp_small_init(
140        pre: *mut dlog_precomp_struct,
141        a: mp_limb_t,
142        mod_: mp_limb_t,
143        n: mp_limb_t,
144        num: mp_limb_t,
145    );
146    pub fn dlog_precomp_n_init(
147        pre: *mut dlog_precomp_struct,
148        a: mp_limb_t,
149        mod_: mp_limb_t,
150        n: mp_limb_t,
151        num: mp_limb_t,
152    );
153    pub fn dlog_precomp_p_init(
154        pre: *mut dlog_precomp_struct,
155        a: mp_limb_t,
156        mod_: mp_limb_t,
157        p: mp_limb_t,
158        num: mp_limb_t,
159    );
160    pub fn dlog_precomp_pe_init(
161        pre: *mut dlog_precomp_struct,
162        a: mp_limb_t,
163        mod_: mp_limb_t,
164        p: mp_limb_t,
165        e: mp_limb_t,
166        pe: mp_limb_t,
167        num: mp_limb_t,
168    );
169    pub fn dlog_precomp_clear(pre: *mut dlog_precomp_struct);
170    pub fn dlog_precomp(pre: *mut dlog_precomp_struct, b: mp_limb_t) -> mp_limb_t;
171    pub fn dlog_order23_init(t: *mut mp_limb_t, a: mp_limb_t) -> mp_limb_t;
172    pub fn dlog_table_init(t: *mut dlog_table_struct, a: mp_limb_t, mod_: mp_limb_t) -> mp_limb_t;
173    pub fn dlog_crt_init(
174        t: *mut dlog_crt_struct,
175        a: mp_limb_t,
176        mod_: mp_limb_t,
177        n: mp_limb_t,
178        num: mp_limb_t,
179    ) -> mp_limb_t;
180    pub fn dlog_power_init(
181        t: *mut dlog_power_struct,
182        a: mp_limb_t,
183        mod_: mp_limb_t,
184        p: mp_limb_t,
185        e: mp_limb_t,
186        num: mp_limb_t,
187    ) -> mp_limb_t;
188    pub fn dlog_modpe_init(
189        t: *mut dlog_modpe_struct,
190        a: mp_limb_t,
191        p: mp_limb_t,
192        e: mp_limb_t,
193        pe: mp_limb_t,
194        num: mp_limb_t,
195    ) -> mp_limb_t;
196    pub fn dlog_bsgs_init(
197        t: *mut dlog_bsgs_struct,
198        a: mp_limb_t,
199        mod_: mp_limb_t,
200        n: mp_limb_t,
201        m: mp_limb_t,
202    ) -> mp_limb_t;
203    pub fn dlog_1modpe_init(
204        t: *mut dlog_1modpe_struct,
205        a1: mp_limb_t,
206        p: mp_limb_t,
207        e: mp_limb_t,
208        pe: nmod_t,
209    );
210    pub fn dlog_rho_init(t: *mut dlog_rho_struct, a: mp_limb_t, mod_: mp_limb_t, n: mp_limb_t);
211    pub fn dlog_once(b: mp_limb_t, a: mp_limb_t, mod_: nmod_t, n: mp_limb_t) -> mp_limb_t;
212    pub fn dlog_crt_clear(t: *mut dlog_crt_struct);
213    pub fn dlog_order23(t: *mut mp_limb_t, b: mp_limb_t) -> mp_limb_t;
214    pub fn dlog_table(t: *mut dlog_table_struct, b: mp_limb_t) -> mp_limb_t;
215    pub fn dlog_crt(t: *mut dlog_crt_struct, b: mp_limb_t) -> mp_limb_t;
216    pub fn dlog_power(t: *mut dlog_power_struct, b: mp_limb_t) -> mp_limb_t;
217    pub fn dlog_modpe(t: *mut dlog_modpe_struct, b: mp_limb_t) -> mp_limb_t;
218    pub fn dlog_bsgs(t: *mut dlog_bsgs_struct, b: mp_limb_t) -> mp_limb_t;
219    pub fn dlog_rho(t: *mut dlog_rho_struct, b: mp_limb_t) -> mp_limb_t;
220    pub fn dlog_1modpe_1modp(
221        b1: mp_limb_t,
222        p: mp_limb_t,
223        e: mp_limb_t,
224        inv1p: mp_limb_t,
225        pe: nmod_t,
226    ) -> mp_limb_t;
227    pub fn dlog_1modpe(
228        t: *mut dlog_1modpe_struct,
229        b1: mp_limb_t,
230        p: mp_limb_t,
231        e: mp_limb_t,
232        pe: nmod_t,
233    ) -> mp_limb_t;
234    pub fn dlog_mod2e_1mod4(b1: mp_limb_t, e: mp_limb_t, inva: mp_limb_t, pe: nmod_t) -> mp_limb_t;
235    pub fn dlog_mod2e(t: *mut dlog_modpe_struct, b: mp_limb_t) -> mp_limb_t;
236    pub fn dlog_n_factor_group(fac: *mut n_factor_t, bound: mp_limb_t);
237    pub fn dlog_vec_pindex_factorgcd(
238        v: *mut mp_limb_t,
239        nv: mp_limb_t,
240        p: mp_limb_t,
241        mod_: nmod_t,
242        a: mp_limb_t,
243        na: mp_limb_t,
244        loga: mp_limb_t,
245        logm1: mp_limb_t,
246        order: nmod_t,
247        maxtry: c_int,
248    ) -> mp_limb_t;
249    pub fn dlog_vec_fill(v: *mut mp_limb_t, nv: mp_limb_t, x: mp_limb_t);
250    pub fn dlog_vec_set_not_found(v: *mut mp_limb_t, nv: mp_limb_t, mod_: nmod_t);
251    pub fn dlog_vec_loop(
252        v: *mut mp_limb_t,
253        nv: mp_limb_t,
254        a: mp_limb_t,
255        va: mp_limb_t,
256        mod_: nmod_t,
257        na: mp_limb_t,
258        order: nmod_t,
259    );
260    pub fn dlog_vec_loop_add(
261        v: *mut mp_limb_t,
262        nv: mp_limb_t,
263        a: mp_limb_t,
264        va: mp_limb_t,
265        mod_: nmod_t,
266        na: mp_limb_t,
267        order: nmod_t,
268    );
269    pub fn dlog_vec_eratos_add(
270        v: *mut mp_limb_t,
271        nv: mp_limb_t,
272        a: mp_limb_t,
273        va: mp_limb_t,
274        mod_: nmod_t,
275        na: mp_limb_t,
276        order: nmod_t,
277    );
278    pub fn dlog_vec_eratos(
279        v: *mut mp_limb_t,
280        nv: mp_limb_t,
281        a: mp_limb_t,
282        va: mp_limb_t,
283        mod_: nmod_t,
284        na: mp_limb_t,
285        order: nmod_t,
286    );
287    pub fn dlog_vec_sieve_add(
288        v: *mut mp_limb_t,
289        nv: mp_limb_t,
290        a: mp_limb_t,
291        va: mp_limb_t,
292        mod_: nmod_t,
293        na: mp_limb_t,
294        order: nmod_t,
295    );
296    pub fn dlog_vec_sieve(
297        v: *mut mp_limb_t,
298        nv: mp_limb_t,
299        a: mp_limb_t,
300        va: mp_limb_t,
301        mod_: nmod_t,
302        na: mp_limb_t,
303        order: nmod_t,
304    );
305    pub fn dlog_vec_add(
306        v: *mut mp_limb_t,
307        nv: mp_limb_t,
308        a: mp_limb_t,
309        va: mp_limb_t,
310        mod_: nmod_t,
311        na: mp_limb_t,
312        order: nmod_t,
313    );
314    pub fn dlog_vec(
315        v: *mut mp_limb_t,
316        nv: mp_limb_t,
317        a: mp_limb_t,
318        va: mp_limb_t,
319        mod_: nmod_t,
320        na: mp_limb_t,
321        order: nmod_t,
322    );
323    pub fn dlog_vec_sieve_precomp(
324        v: *mut mp_limb_t,
325        nv: mp_limb_t,
326        pre: *mut dlog_precomp_struct,
327        a: mp_limb_t,
328        va: mp_limb_t,
329        mod_: nmod_t,
330        na: mp_limb_t,
331        order: nmod_t,
332    );
333    pub fn dlog_vec_sieve_add_precomp(
334        v: *mut mp_limb_t,
335        nv: mp_limb_t,
336        pre: *mut dlog_precomp_struct,
337        a: mp_limb_t,
338        va: mp_limb_t,
339        mod_: nmod_t,
340        na: mp_limb_t,
341        order: nmod_t,
342    );
343    pub fn dlog_vec_add_precomp(
344        v: *mut mp_limb_t,
345        nv: mp_limb_t,
346        pre: *mut dlog_precomp_struct,
347        a: mp_limb_t,
348        va: mp_limb_t,
349        mod_: nmod_t,
350        na: mp_limb_t,
351        order: nmod_t,
352    );
353}