1use crate::deps::*;
4use crate::flint::*;
5use crate::gr_types::*;
6
7
8pub type ull_t = __uint128_t;
9#[repr(C)]
10pub struct nmod_redc_ctx_struct {
11 pub mod_: nmod_t,
12 pub nred: ulong,
13}
14#[allow(clippy::unnecessary_operation, clippy::identity_op)]
15const _: () = {
16 ["Size of nmod_redc_ctx_struct"][::std::mem::size_of::<nmod_redc_ctx_struct>() - 32usize];
17 ["Alignment of nmod_redc_ctx_struct"][::std::mem::align_of::<nmod_redc_ctx_struct>() - 8usize];
18 ["Offset of field: nmod_redc_ctx_struct::mod_"]
19 [::std::mem::offset_of!(nmod_redc_ctx_struct, mod_) - 0usize];
20 ["Offset of field: nmod_redc_ctx_struct::nred"]
21 [::std::mem::offset_of!(nmod_redc_ctx_struct, nred) - 24usize];
22};
23impl Default for nmod_redc_ctx_struct {
24 fn default() -> Self {
25 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
26 unsafe {
27 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
28 s.assume_init()
29 }
30 }
31}
32pub type nmod_redc_ctx_t = [nmod_redc_ctx_struct; 1usize];
33#[repr(C)]
34pub struct _gr_nmod_ctx_struct {
35 pub nmod: nmod_t,
36 pub a: ulong,
37 pub is_prime: truth_t,
38}
39#[allow(clippy::unnecessary_operation, clippy::identity_op)]
40const _: () = {
41 ["Size of _gr_nmod_ctx_struct"][::std::mem::size_of::<_gr_nmod_ctx_struct>() - 40usize];
42 ["Alignment of _gr_nmod_ctx_struct"][::std::mem::align_of::<_gr_nmod_ctx_struct>() - 8usize];
43 ["Offset of field: _gr_nmod_ctx_struct::nmod"]
44 [::std::mem::offset_of!(_gr_nmod_ctx_struct, nmod) - 0usize];
45 ["Offset of field: _gr_nmod_ctx_struct::a"]
46 [::std::mem::offset_of!(_gr_nmod_ctx_struct, a) - 24usize];
47 ["Offset of field: _gr_nmod_ctx_struct::is_prime"]
48 [::std::mem::offset_of!(_gr_nmod_ctx_struct, is_prime) - 32usize];
49};
50impl Default for _gr_nmod_ctx_struct {
51 fn default() -> Self {
52 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
53 unsafe {
54 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
55 s.assume_init()
56 }
57 }
58}
59#[repr(C)]
60pub struct _gr_nmod_redc_ctx_struct {
61 pub ctx: nmod_redc_ctx_struct,
62 pub one: ulong,
63 pub is_prime: truth_t,
64}
65#[allow(clippy::unnecessary_operation, clippy::identity_op)]
66const _: () = {
67 ["Size of _gr_nmod_redc_ctx_struct"]
68 [::std::mem::size_of::<_gr_nmod_redc_ctx_struct>() - 48usize];
69 ["Alignment of _gr_nmod_redc_ctx_struct"]
70 [::std::mem::align_of::<_gr_nmod_redc_ctx_struct>() - 8usize];
71 ["Offset of field: _gr_nmod_redc_ctx_struct::ctx"]
72 [::std::mem::offset_of!(_gr_nmod_redc_ctx_struct, ctx) - 0usize];
73 ["Offset of field: _gr_nmod_redc_ctx_struct::one"]
74 [::std::mem::offset_of!(_gr_nmod_redc_ctx_struct, one) - 32usize];
75 ["Offset of field: _gr_nmod_redc_ctx_struct::is_prime"]
76 [::std::mem::offset_of!(_gr_nmod_redc_ctx_struct, is_prime) - 40usize];
77};
78impl Default for _gr_nmod_redc_ctx_struct {
79 fn default() -> Self {
80 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
81 unsafe {
82 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
83 s.assume_init()
84 }
85 }
86}
87#[repr(C)]
88pub struct nmod_discrete_log_pohlig_hellman_table_entry_struct {
89 pub gammapow: ulong,
90 pub cm: ulong,
91}
92#[allow(clippy::unnecessary_operation, clippy::identity_op)]
93const _: () = {
94 ["Size of nmod_discrete_log_pohlig_hellman_table_entry_struct"]
95 [::std::mem::size_of::<nmod_discrete_log_pohlig_hellman_table_entry_struct>() - 16usize];
96 ["Alignment of nmod_discrete_log_pohlig_hellman_table_entry_struct"]
97 [::std::mem::align_of::<nmod_discrete_log_pohlig_hellman_table_entry_struct>() - 8usize];
98 ["Offset of field: nmod_discrete_log_pohlig_hellman_table_entry_struct::gammapow"][::std::mem::offset_of!(
99 nmod_discrete_log_pohlig_hellman_table_entry_struct,
100 gammapow
101 ) - 0usize];
102 ["Offset of field: nmod_discrete_log_pohlig_hellman_table_entry_struct::cm"]
103 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_table_entry_struct, cm) - 8usize];
104};
105impl Default for nmod_discrete_log_pohlig_hellman_table_entry_struct {
106 fn default() -> Self {
107 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
108 unsafe {
109 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
110 s.assume_init()
111 }
112 }
113}
114#[repr(C)]
115pub struct nmod_discrete_log_pohlig_hellman_entry_struct {
116 pub exp: slong,
117 pub prime: ulong,
118 pub gamma: ulong,
119 pub gammainv: ulong,
120 pub startingbeta: ulong,
121 pub co: ulong,
122 pub startinge: ulong,
123 pub idem: ulong,
124 pub cbound: ulong,
125 pub dbound: ulong,
126 pub table: *mut nmod_discrete_log_pohlig_hellman_table_entry_struct,
127}
128#[allow(clippy::unnecessary_operation, clippy::identity_op)]
129const _: () = {
130 ["Size of nmod_discrete_log_pohlig_hellman_entry_struct"]
131 [::std::mem::size_of::<nmod_discrete_log_pohlig_hellman_entry_struct>() - 88usize];
132 ["Alignment of nmod_discrete_log_pohlig_hellman_entry_struct"]
133 [::std::mem::align_of::<nmod_discrete_log_pohlig_hellman_entry_struct>() - 8usize];
134 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::exp"]
135 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, exp) - 0usize];
136 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::prime"]
137 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, prime) - 8usize];
138 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::gamma"]
139 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, gamma) - 16usize];
140 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::gammainv"]
141 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, gammainv) - 24usize];
142 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::startingbeta"][::std::mem::offset_of!(
143 nmod_discrete_log_pohlig_hellman_entry_struct,
144 startingbeta
145 ) - 32usize];
146 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::co"]
147 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, co) - 40usize];
148 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::startinge"][::std::mem::offset_of!(
149 nmod_discrete_log_pohlig_hellman_entry_struct,
150 startinge
151 ) - 48usize];
152 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::idem"]
153 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, idem) - 56usize];
154 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::cbound"]
155 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, cbound) - 64usize];
156 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::dbound"]
157 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, dbound) - 72usize];
158 ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::table"]
159 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, table) - 80usize];
160};
161impl Default for nmod_discrete_log_pohlig_hellman_entry_struct {
162 fn default() -> Self {
163 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
164 unsafe {
165 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
166 s.assume_init()
167 }
168 }
169}
170#[repr(C)]
171pub struct nmod_discrete_log_pohlig_hellman_struct {
172 pub mod_: nmod_t,
173 pub alpha: ulong,
174 pub alphainv: ulong,
175 pub num_factors: slong,
176 pub entries: *mut nmod_discrete_log_pohlig_hellman_entry_struct,
177}
178#[allow(clippy::unnecessary_operation, clippy::identity_op)]
179const _: () = {
180 ["Size of nmod_discrete_log_pohlig_hellman_struct"]
181 [::std::mem::size_of::<nmod_discrete_log_pohlig_hellman_struct>() - 56usize];
182 ["Alignment of nmod_discrete_log_pohlig_hellman_struct"]
183 [::std::mem::align_of::<nmod_discrete_log_pohlig_hellman_struct>() - 8usize];
184 ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::mod_"]
185 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, mod_) - 0usize];
186 ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::alpha"]
187 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, alpha) - 24usize];
188 ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::alphainv"]
189 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, alphainv) - 32usize];
190 ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::num_factors"]
191 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, num_factors) - 40usize];
192 ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::entries"]
193 [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, entries) - 48usize];
194};
195impl Default for nmod_discrete_log_pohlig_hellman_struct {
196 fn default() -> Self {
197 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
198 unsafe {
199 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
200 s.assume_init()
201 }
202 }
203}
204pub type nmod_discrete_log_pohlig_hellman_t = [nmod_discrete_log_pohlig_hellman_struct; 1usize];
205pub type __uint128_t = u128;
206extern "C" {
207 #[link_name = "nmod_set_ui__extern"]
208 pub fn nmod_set_ui(x: ulong, mod_: nmod_t) -> ulong;
209 #[link_name = "nmod_set_si__extern"]
210 pub fn nmod_set_si(x: slong, mod_: nmod_t) -> ulong;
211 #[link_name = "_nmod_add__extern"]
212 pub fn _nmod_add(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
213 #[link_name = "_nmod_sub__extern"]
214 pub fn _nmod_sub(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
215 #[link_name = "nmod_add__extern"]
216 pub fn nmod_add(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
217 #[link_name = "nmod_ui_add_ui__extern"]
218 pub fn nmod_ui_add_ui(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
219 #[link_name = "nmod_sub__extern"]
220 pub fn nmod_sub(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
221 #[link_name = "nmod_neg__extern"]
222 pub fn nmod_neg(a: ulong, mod_: nmod_t) -> ulong;
223 #[link_name = "nmod_mul__extern"]
224 pub fn nmod_mul(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
225 #[link_name = "nmod_ui_mul_ui__extern"]
226 pub fn nmod_ui_mul_ui(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
227 #[link_name = "_nmod_mul_fullword__extern"]
228 pub fn _nmod_mul_fullword(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
229 #[link_name = "nmod_addmul__extern"]
230 pub fn nmod_addmul(s: ulong, a: ulong, b: ulong, mod_: nmod_t) -> ulong;
231 #[link_name = "nmod_fmma__extern"]
232 pub fn nmod_fmma(a: ulong, b: ulong, c: ulong, d: ulong, mod_: nmod_t) -> ulong;
233 #[link_name = "nmod_inv__extern"]
234 pub fn nmod_inv(a: ulong, mod_: nmod_t) -> ulong;
235 #[link_name = "nmod_div__extern"]
236 pub fn nmod_div(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
237 pub fn nmod_divides(a: *mut ulong, b: ulong, c: ulong, mod_: nmod_t) -> libc::c_int;
238 pub fn _nmod_pow_ui_redc(a: ulong, exp: ulong, mod_: nmod_t) -> ulong;
239 pub fn _nmod_pow_ui_binexp(a: ulong, exp: ulong, mod_: nmod_t) -> ulong;
240 pub fn nmod_pow_ui(a: ulong, exp: ulong, mod_: nmod_t) -> ulong;
241 #[link_name = "nmod_ui_pow_ui__extern"]
242 pub fn nmod_ui_pow_ui(a: ulong, exp: ulong, mod_: nmod_t) -> ulong;
243 pub fn _nmod_2_pow_ui_binexp(exp: ulong, mod_: nmod_t) -> ulong;
244 pub fn nmod_2_pow_ui(exp: ulong, mod_: nmod_t) -> ulong;
245 #[link_name = "nmod_pow_fmpz__extern"]
246 pub fn nmod_pow_fmpz(a: ulong, exp: *const fmpz, mod_: nmod_t) -> ulong;
247 #[link_name = "nmod_init__extern"]
248 pub fn nmod_init(mod_: *mut nmod_t, n: ulong);
249 #[link_name = "ull_hi__extern"]
250 pub fn ull_hi(x: ull_t) -> ulong;
251 #[link_name = "ull_lo__extern"]
252 pub fn ull_lo(x: ull_t) -> ulong;
253 #[link_name = "ull_add__extern"]
254 pub fn ull_add(x: ull_t, y: ull_t) -> ull_t;
255 #[link_name = "ull_add_u__extern"]
256 pub fn ull_add_u(x: ull_t, y: ulong) -> ull_t;
257 #[link_name = "ull_u_mul_u__extern"]
258 pub fn ull_u_mul_u(x: ulong, y: ulong) -> ull_t;
259 #[link_name = "ull__extern"]
260 pub fn ull(hi: ulong, lo: ulong) -> ull_t;
261 #[link_name = "n_to_redc_preinv__extern"]
262 pub fn n_to_redc_preinv(a: ulong, n: ulong, ninv: ulong, norm: ulong) -> ulong;
263 #[link_name = "n_redc_fast__extern"]
264 pub fn n_redc_fast(x: ulong, n: ulong, nred: ulong) -> ulong;
265 #[link_name = "n_ll_redc_fast__extern"]
266 pub fn n_ll_redc_fast(x: ull_t, n: ulong, nred: ulong) -> ulong;
267 #[link_name = "n_redc__extern"]
268 pub fn n_redc(x: ulong, n: ulong, nred: ulong) -> ulong;
269 #[link_name = "n_ll_redc__extern"]
270 pub fn n_ll_redc(x: ull_t, n: ulong, nred: ulong) -> ulong;
271 #[link_name = "n_mulmod_redc__extern"]
272 pub fn n_mulmod_redc(a: ulong, b: ulong, n: ulong, nred: ulong) -> ulong;
273 #[link_name = "n_mulmod_redc_fast__extern"]
274 pub fn n_mulmod_redc_fast(a: ulong, b: ulong, n: ulong, nred: ulong) -> ulong;
275 #[link_name = "nmod_redc_ctx_init_nmod__extern"]
276 pub fn nmod_redc_ctx_init_nmod(ctx: *mut nmod_redc_ctx_struct, mod_: nmod_t);
277 #[link_name = "nmod_redc_ctx_init_ui__extern"]
278 pub fn nmod_redc_ctx_init_ui(ctx: *mut nmod_redc_ctx_struct, n: ulong);
279 #[link_name = "nmod_redc_set_nmod__extern"]
280 pub fn nmod_redc_set_nmod(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
281 #[link_name = "nmod_redc_set_ui__extern"]
282 pub fn nmod_redc_set_ui(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
283 #[link_name = "nmod_redc_get_nmod__extern"]
284 pub fn nmod_redc_get_nmod(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
285 #[link_name = "nmod_redc_neg__extern"]
286 pub fn nmod_redc_neg(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
287 #[link_name = "nmod_redc_add__extern"]
288 pub fn nmod_redc_add(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
289 #[link_name = "nmod_redc_sub__extern"]
290 pub fn nmod_redc_sub(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
291 #[link_name = "nmod_redc_mul__extern"]
292 pub fn nmod_redc_mul(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
293 #[link_name = "nmod_redc_can_use_fast__extern"]
294 pub fn nmod_redc_can_use_fast(ctx: *const nmod_redc_ctx_struct) -> libc::c_int;
295 #[link_name = "nmod_redc_fast_mul__extern"]
296 pub fn nmod_redc_fast_mul(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
297 #[link_name = "nmod_redc_fast_neg__extern"]
298 pub fn nmod_redc_fast_neg(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
299 #[link_name = "nmod_redc_fast_add__extern"]
300 pub fn nmod_redc_fast_add(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
301 #[link_name = "nmod_redc_fast_sub__extern"]
302 pub fn nmod_redc_fast_sub(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
303 #[link_name = "nmod_redc_fast_normalise__extern"]
304 pub fn nmod_redc_fast_normalise(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
305 #[link_name = "nmod_redc_fast_mul_two__extern"]
306 pub fn nmod_redc_fast_mul_two(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
307 pub fn _nmod_redc_pow_ui(a: ulong, exp: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
308 pub fn _nmod_redc_fast_pow_ui(a: ulong, exp: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
309 pub fn _nmod_redc_2_pow_ui(exp: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
310 pub fn _nmod_redc_fast_2_pow_ui(exp: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
311 #[link_name = "n_to_redc_half_preinv__extern"]
312 pub fn n_to_redc_half_preinv(a: ulong, n: ulong, ninv: ulong, UNUSED_norm: ulong) -> ulong;
313 #[link_name = "n_redc_half_fast__extern"]
314 pub fn n_redc_half_fast(x: ulong, n: ulong, nred: ulong) -> ulong;
315 #[link_name = "n_redc_half__extern"]
316 pub fn n_redc_half(x: ulong, n: ulong, nred: ulong) -> ulong;
317 #[link_name = "n_mulmod_redc_half__extern"]
318 pub fn n_mulmod_redc_half(a: ulong, b: ulong, n: ulong, nred: ulong) -> ulong;
319 #[link_name = "n_mulmod_redc_half_fast__extern"]
320 pub fn n_mulmod_redc_half_fast(a: ulong, b: ulong, n: ulong, nred: ulong) -> ulong;
321 #[link_name = "nmod_redc_half_ctx_init_nmod__extern"]
322 pub fn nmod_redc_half_ctx_init_nmod(ctx: *mut nmod_redc_ctx_struct, mod_: nmod_t);
323 #[link_name = "nmod_redc_half_ctx_init_ui__extern"]
324 pub fn nmod_redc_half_ctx_init_ui(ctx: *mut nmod_redc_ctx_struct, n: ulong);
325 #[link_name = "nmod_redc_half_set_nmod__extern"]
326 pub fn nmod_redc_half_set_nmod(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
327 #[link_name = "nmod_redc_half_set_ui__extern"]
328 pub fn nmod_redc_half_set_ui(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
329 #[link_name = "nmod_redc_half_get_nmod__extern"]
330 pub fn nmod_redc_half_get_nmod(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
331 #[link_name = "nmod_redc_half_add__extern"]
332 pub fn nmod_redc_half_add(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
333 #[link_name = "nmod_redc_half_sub__extern"]
334 pub fn nmod_redc_half_sub(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
335 #[link_name = "nmod_redc_half_mul__extern"]
336 pub fn nmod_redc_half_mul(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
337 #[link_name = "nmod_redc_half_can_use_fast__extern"]
338 pub fn nmod_redc_half_can_use_fast(ctx: *const nmod_redc_ctx_struct) -> libc::c_int;
339 #[link_name = "nmod_redc_half_fast_mul__extern"]
340 pub fn nmod_redc_half_fast_mul(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
341 #[link_name = "nmod_redc_half_fast_add__extern"]
342 pub fn nmod_redc_half_fast_add(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
343 #[link_name = "nmod_redc_half_fast_sub__extern"]
344 pub fn nmod_redc_half_fast_sub(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
345 pub fn gr_ctx_init_nmod_redc(ctx: *mut gr_ctx_struct, n: ulong) -> libc::c_int;
346 pub fn gr_ctx_init_nmod_redc_fast(ctx: *mut gr_ctx_struct, n: ulong) -> libc::c_int;
347 pub fn nmod_discrete_log_pohlig_hellman_init(L: *mut nmod_discrete_log_pohlig_hellman_struct);
348 pub fn nmod_discrete_log_pohlig_hellman_clear(L: *mut nmod_discrete_log_pohlig_hellman_struct);
349 pub fn nmod_discrete_log_pohlig_hellman_precompute_prime(
350 L: *mut nmod_discrete_log_pohlig_hellman_struct,
351 p: ulong,
352 ) -> f64;
353 pub fn nmod_discrete_log_pohlig_hellman_run(
354 L: *const nmod_discrete_log_pohlig_hellman_struct,
355 y: ulong,
356 ) -> ulong;
357 #[link_name = "nmod_discrete_log_pohlig_hellman_primitive_root__extern"]
358 pub fn nmod_discrete_log_pohlig_hellman_primitive_root(
359 L: *const nmod_discrete_log_pohlig_hellman_struct,
360 ) -> ulong;
361}