1#![allow(non_camel_case_types)]
2
3use crate::deps::*;
6use crate::flint::*;
7use libc::{c_char, c_int, size_t, FILE};
8
9#[repr(C)]
10#[derive(Default, Debug, Copy, Clone, Hash)]
11pub struct fmpz(pub slong);
12
13pub type fmpz_t = [fmpz; 1usize];
14pub type fmpz_randstate_t = gmp_randstate_t;
15
16#[repr(C)]
17#[derive(Debug, Copy, Clone)]
18pub struct fmpz_preinvn_struct {
19 pub dinv: mp_ptr,
20 pub n: mp_limb_signed_t,
21 pub norm: mp_limb_t,
22}
23
24pub type fmpz_preinvn_t = [fmpz_preinvn_struct; 1usize];
25
26#[repr(C)]
52#[derive(Debug, Copy, Clone)]
53pub struct _fmpz_multi_crt_prog_instr {
54 pub a_idx: mp_limb_signed_t,
55 pub b_idx: mp_limb_signed_t,
56 pub c_idx: mp_limb_signed_t,
57 pub idem: fmpz_t,
58 pub modulus: fmpz_t,
59}
60
61#[repr(C)]
62#[derive(Debug, Copy, Clone)]
63pub struct fmpz_multi_crt_struct {
64 pub prog: *mut _fmpz_multi_crt_prog_instr,
65 pub length: mp_limb_signed_t,
66 pub alloc: mp_limb_signed_t,
67 pub localsize: mp_limb_signed_t,
68 pub temp1loc: mp_limb_signed_t,
69 pub temp2loc: mp_limb_signed_t,
70 pub good: c_int,
71}
72
73pub type fmpz_multi_crt_t = [fmpz_multi_crt_struct; 1usize];
74
75extern "C" {
76 pub static mut fmpz_arr: *mut __mpz_struct;
77 pub static mut fmpz_randstate: gmp_randstate_t;
78 pub fn _fmpz_new_mpz() -> *mut __mpz_struct;
79 pub fn _fmpz_clear_mpz(f: fmpz);
80 pub fn _fmpz_cleanup_mpz_content();
81 pub fn _fmpz_cleanup();
82 pub fn _fmpz_promote(f: *mut fmpz) -> *mut __mpz_struct;
83
84 pub fn _fmpz_promote_val(f: *mut fmpz) -> *mut __mpz_struct;
86 pub fn _fmpz_demote(f: *mut fmpz);
87
88 pub fn _fmpz_demote_val(f: *mut fmpz);
90 pub fn _fmpz_init_readonly_mpz(f: *mut fmpz, z: *mut __mpz_struct);
91 pub fn _fmpz_clear_readonly_mpz(arg1: *mut __mpz_struct);
92
93 pub fn fmpz_init(f: *mut fmpz);
95
96 pub fn fmpz_init2(f: *mut fmpz, limbs: mp_limb_t);
98
99 pub fn fmpz_init_set(f: *mut fmpz, g: *const fmpz);
101 pub fn fmpz_init_set_ui(f: *mut fmpz, g: mp_limb_t);
102 pub fn fmpz_init_set_si(f: *mut fmpz, g: mp_limb_signed_t);
103 pub fn fmpz_clear(f: *mut fmpz);
104 pub fn fmpz_randbits(f: *mut fmpz, state: *const flint_rand_s, bits: mp_limb_t);
105 pub fn fmpz_randm(f: *mut fmpz, state: *const flint_rand_s, m: *const fmpz);
106 pub fn fmpz_randtest(f: *mut fmpz, state: *const flint_rand_s, bits: mp_limb_t);
107 pub fn fmpz_randtest_unsigned(f: *mut fmpz, state: *const flint_rand_s, bits: mp_limb_t);
108 pub fn fmpz_randtest_not_zero(f: *mut fmpz, state: *const flint_rand_s, bits: mp_limb_t);
109 pub fn fmpz_randtest_mod(f: *mut fmpz, state: *const flint_rand_s, m: *const fmpz);
110 pub fn fmpz_randtest_mod_signed(f: *mut fmpz, state: *const flint_rand_s, m: *const fmpz);
111 pub fn fmpz_randprime(f: *mut fmpz, state: *const flint_rand_s, bits: mp_limb_t, proved: c_int);
112 pub fn fmpz_get_si(f: *const fmpz) -> mp_limb_signed_t;
113 pub fn fmpz_get_ui(f: *const fmpz) -> mp_limb_t;
114 pub fn fmpz_get_uiui(hi: *mut mp_limb_t, low: *mut mp_limb_t, f: *const fmpz);
115 pub fn fmpz_set_si(f: *mut fmpz, val: mp_limb_signed_t);
116 pub fn fmpz_set_ui(f: *mut fmpz, val: mp_limb_t);
117 pub fn fmpz_neg_ui(f: *mut fmpz, val: mp_limb_t);
118 pub fn fmpz_set_uiui(f: *mut fmpz, hi: mp_limb_t, lo: mp_limb_t);
119 pub fn fmpz_neg_uiui(f: *mut fmpz, hi: mp_limb_t, lo: mp_limb_t);
120 pub fn fmpz_set_signed_uiui(r: *mut fmpz, hi: mp_limb_t, lo: mp_limb_t);
121 pub fn fmpz_set_signed_uiuiui(r: *mut fmpz, hi: mp_limb_t, mid: mp_limb_t, lo: mp_limb_t);
122 pub fn fmpz_set_ui_array(out: *mut fmpz, in_: *const mp_limb_t, in_len: mp_limb_signed_t);
123 pub fn fmpz_get_ui_array(out: *mut mp_limb_t, out_len: mp_limb_signed_t, in_: *const fmpz);
124 pub fn fmpz_get_mpz(x: *mut __mpz_struct, f: *const fmpz);
125 pub fn fmpz_set_mpz(f: *mut fmpz, x: *const __mpz_struct);
126 pub fn fmpz_get_d(f: *const fmpz) -> f64;
127 pub fn fmpz_set_d(f: *mut fmpz, c: f64);
128 pub fn fmpz_get_mpf(x: *mut __mpf_struct, f: *const fmpz);
129 pub fn fmpz_set_mpf(f: *mut fmpz, x: *const __mpf_struct);
130 pub fn fmpz_get_mpfr(x: *mut __mpfr_struct, f: *const fmpz, rnd: mpfr_rnd_t);
131 pub fn fmpz_get_mpn(n: *mut mp_ptr, n_in: *const fmpz) -> c_int;
132 pub fn fmpz_set_str(f: *mut fmpz, str_: *const c_char, b: c_int) -> c_int;
133 pub fn flint_mpz_init_set_readonly(z: *mut __mpz_struct, f: *const fmpz);
134 pub fn flint_mpz_clear_readonly(z: *mut __mpz_struct);
135 pub fn fmpz_init_set_readonly(f: *mut fmpz, z: *const __mpz_struct);
136 pub fn fmpz_clear_readonly(f: *mut fmpz);
137 pub fn fmpz_abs_fits_ui(f: *const fmpz) -> c_int;
138 pub fn fmpz_fits_si(f: *const fmpz) -> c_int;
139 pub fn fmpz_zero(f: *mut fmpz);
140 pub fn fmpz_one(f: *mut fmpz);
141 pub fn fmpz_is_zero(f: *const fmpz) -> c_int;
142 pub fn fmpz_is_one(f: *const fmpz) -> c_int;
143 pub fn fmpz_is_pm1(f: *const fmpz) -> c_int;
144 pub fn fmpz_set(f: *mut fmpz, g: *const fmpz);
145 pub fn fmpz_equal(f: *const fmpz, g: *const fmpz) -> c_int;
146 pub fn fmpz_equal_si(f: *const fmpz, g: mp_limb_signed_t) -> c_int;
147 pub fn fmpz_equal_ui(f: *const fmpz, g: mp_limb_t) -> c_int;
148 pub fn fmpz_read(f: *mut fmpz) -> c_int;
149 pub fn fmpz_fread(file: *mut FILE, f: *mut fmpz) -> c_int;
150 pub fn fmpz_inp_raw(x: *mut fmpz, fin: *mut FILE) -> size_t;
151 pub fn fmpz_print(x: *const fmpz) -> c_int;
152 pub fn fmpz_fprint(file: *mut FILE, x: *const fmpz) -> c_int;
153 pub fn fmpz_out_raw(fout: *mut FILE, x: *const fmpz) -> size_t;
154 pub fn fmpz_sizeinbase(f: *const fmpz, b: c_int) -> size_t;
155 pub fn fmpz_get_str(str_: *mut c_char, b: c_int, f: *const fmpz) -> *mut c_char;
156 pub fn fmpz_swap(f: *mut fmpz, g: *mut fmpz);
157 pub fn fmpz_cmp(f: *const fmpz, g: *const fmpz) -> c_int;
158 pub fn fmpz_cmp_ui(f: *const fmpz, g: mp_limb_t) -> c_int;
159 pub fn fmpz_cmp_si(f: *const fmpz, g: mp_limb_signed_t) -> c_int;
160 pub fn fmpz_cmpabs(f: *const fmpz, g: *const fmpz) -> c_int;
161 pub fn fmpz_is_even(f: *const fmpz) -> c_int;
162 pub fn fmpz_is_odd(f: *const fmpz) -> c_int;
163 pub fn fmpz_size(f: *const fmpz) -> mp_size_t;
164 pub fn fmpz_sgn(f: *const fmpz) -> c_int;
165 pub fn fmpz_bits(f: *const fmpz) -> mp_limb_t;
166 pub fn fmpz_val2(x: *const fmpz) -> mp_limb_t;
167 pub fn fmpz_neg(f1: *mut fmpz, f2: *const fmpz);
168 pub fn fmpz_abs(f1: *mut fmpz, f2: *const fmpz);
169 pub fn fmpz_add(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
170 pub fn fmpz_sub(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
171 pub fn fmpz_mul_ui(f: *mut fmpz, g: *const fmpz, x: mp_limb_t);
172 pub fn fmpz_mul_si(f: *mut fmpz, g: *const fmpz, x: mp_limb_signed_t);
173 pub fn fmpz_mul(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
174 pub fn fmpz_mul_2exp(f: *mut fmpz, g: *const fmpz, exp: mp_limb_t);
175 pub fn fmpz_add_ui(f: *mut fmpz, g: *const fmpz, x: mp_limb_t);
176 pub fn fmpz_sub_ui(f: *mut fmpz, g: *const fmpz, x: mp_limb_t);
177 pub fn fmpz_add_si(f: *mut fmpz, g: *const fmpz, x: mp_limb_signed_t);
178 pub fn fmpz_sub_si(f: *mut fmpz, g: *const fmpz, x: mp_limb_signed_t);
179 pub fn fmpz_addmul_ui(f: *mut fmpz, g: *const fmpz, x: mp_limb_t);
180 pub fn fmpz_addmul_si(f: *mut fmpz, g: *const fmpz, x: mp_limb_signed_t);
181 pub fn fmpz_submul_ui(f: *mut fmpz, g: *const fmpz, x: mp_limb_t);
182 pub fn fmpz_submul_si(f: *mut fmpz, g: *const fmpz, x: mp_limb_signed_t);
183 pub fn fmpz_addmul(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
184 pub fn fmpz_submul(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
185 pub fn fmpz_fmma(f: *mut fmpz, a: *const fmpz, b: *const fmpz, c: *const fmpz, d: *const fmpz);
186 pub fn fmpz_fmms(f: *mut fmpz, a: *const fmpz, b: *const fmpz, c: *const fmpz, d: *const fmpz);
187 pub fn fmpz_pow_ui(f: *mut fmpz, g: *const fmpz, exp: mp_limb_t);
188 pub fn fmpz_pow_fmpz(a: *mut fmpz, b: *const fmpz, e: *const fmpz) -> c_int;
189 pub fn fmpz_powm_ui(f: *mut fmpz, g: *const fmpz, exp: mp_limb_t, m: *const fmpz);
190 pub fn fmpz_powm(f: *mut fmpz, g: *const fmpz, e: *const fmpz, m: *const fmpz);
191 pub fn fmpz_setbit(f: *mut fmpz, i: mp_limb_t);
192 pub fn fmpz_tstbit(f: *const fmpz, i: mp_limb_t) -> c_int;
193 pub fn fmpz_clrbit(f: *mut fmpz, i: mp_limb_t);
194 pub fn fmpz_complement(r: *mut fmpz, f: *const fmpz);
195 pub fn fmpz_combit(f: *mut fmpz, i: mp_limb_t);
196 pub fn fmpz_and(r: *mut fmpz, a: *const fmpz, b: *const fmpz);
197 pub fn fmpz_or(r: *mut fmpz, a: *const fmpz, b: *const fmpz);
198 pub fn fmpz_xor(r: *mut fmpz, a: *const fmpz, b: *const fmpz);
199 pub fn fmpz_popcnt(c: *mut fmpz) -> mp_limb_t;
200 pub fn fmpz_dlog(x: *const fmpz) -> f64;
201 pub fn fmpz_flog(x: *const fmpz, b: *const fmpz) -> mp_limb_signed_t;
202 pub fn fmpz_flog_ui(x: *const fmpz, b: mp_limb_t) -> mp_limb_signed_t;
203 pub fn fmpz_clog(x: *const fmpz, b: *const fmpz) -> mp_limb_signed_t;
204 pub fn fmpz_clog_ui(x: *const fmpz, b: mp_limb_t) -> mp_limb_signed_t;
205 pub fn fmpz_sqrtmod(b: *mut fmpz, a: *const fmpz, p: *const fmpz) -> c_int;
206 pub fn fmpz_sqrt(f: *mut fmpz, g: *const fmpz);
207 pub fn fmpz_is_square(f: *const fmpz) -> c_int;
208 pub fn fmpz_root(r: *mut fmpz, f: *const fmpz, n: mp_limb_signed_t);
209 pub fn fmpz_is_perfect_power(root: *mut fmpz, f: *const fmpz) -> c_int;
210 pub fn fmpz_sqrtrem(f: *mut fmpz, r: *const fmpz, g: *const fmpz);
211 pub fn fmpz_fdiv_ui(g: *const fmpz, h: mp_limb_t) -> mp_limb_t;
212 pub fn fmpz_mod_ui(f: *mut fmpz, g: *const fmpz, h: mp_limb_t) -> mp_limb_t;
213 pub fn fmpz_mod(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
214 pub fn fmpz_smod(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
215 pub fn fmpz_negmod(r: *mut fmpz, a: *const fmpz, mod_: *const fmpz);
216 pub fn fmpz_gcd(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
217 pub fn fmpz_lcm(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
218 pub fn fmpz_gcdinv(d: *mut fmpz, a: *mut fmpz, f: *const fmpz, g: *const fmpz);
219 pub fn fmpz_xgcd(d: *mut fmpz, a: *mut fmpz, b: *mut fmpz, f: *const fmpz, g: *const fmpz);
220 pub fn fmpz_xgcd_canonical_bezout(
221 d: *mut fmpz,
222 a: *mut fmpz,
223 b: *mut fmpz,
224 f: *const fmpz,
225 g: *const fmpz,
226 );
227 pub fn fmpz_xgcd_partial(
228 co2: *mut fmpz,
229 co1: *mut fmpz,
230 r2: *mut fmpz,
231 r1: *mut fmpz,
232 L: *mut fmpz,
233 );
234 pub fn fmpz_invmod(f: *mut fmpz, g: *const fmpz, h: *const fmpz) -> c_int;
235 pub fn fmpz_jacobi(a: *const fmpz, p: *const fmpz) -> c_int;
236 pub fn fmpz_kronecker(a: *const fmpz, n: *const fmpz) -> c_int;
237 pub fn fmpz_divides_mod_list(
238 xstart: *mut fmpz,
239 xstride: *mut fmpz,
240 xlength: *mut fmpz,
241 a: *const fmpz,
242 b: *const fmpz,
243 n: *const fmpz,
244 );
245 pub fn _fmpz_remove(x: *mut fmpz, f: *const fmpz, finv: f64) -> mp_limb_signed_t;
246 pub fn fmpz_remove(rop: *mut fmpz, op: *const fmpz, f: *const fmpz) -> mp_limb_signed_t;
247 pub fn fmpz_divexact(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
248 pub fn fmpz_divexact_si(f: *mut fmpz, g: *const fmpz, h: mp_limb_signed_t);
249 pub fn fmpz_divexact_ui(f: *mut fmpz, g: *const fmpz, h: mp_limb_t);
250 pub fn fmpz_divisible(f: *const fmpz, g: *const fmpz) -> c_int;
251 pub fn fmpz_divisible_si(f: *const fmpz, g: mp_limb_signed_t) -> c_int;
252 pub fn fmpz_cdiv_qr(f: *mut fmpz, s: *mut fmpz, g: *const fmpz, h: *const fmpz);
253 pub fn fmpz_cdiv_q(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
254 pub fn fmpz_cdiv_q_si(f: *mut fmpz, g: *const fmpz, h: mp_limb_signed_t);
255 pub fn fmpz_cdiv_q_ui(f: *mut fmpz, g: *const fmpz, h: mp_limb_t);
256 pub fn fmpz_cdiv_q_2exp(f: *mut fmpz, g: *const fmpz, exp: mp_limb_t);
257 pub fn fmpz_cdiv_r_2exp(f: *mut fmpz, g: *const fmpz, exp: mp_limb_t);
258 pub fn fmpz_cdiv_ui(g: *const fmpz, h: mp_limb_t) -> mp_limb_t;
259 pub fn fmpz_fdiv_qr(f: *mut fmpz, s: *mut fmpz, g: *const fmpz, h: *const fmpz);
260 pub fn fmpz_fdiv_qr_preinvn(
261 f: *mut fmpz,
262 s: *mut fmpz,
263 g: *mut fmpz,
264 h: *mut fmpz,
265 inv: *mut fmpz_preinvn_struct,
266 );
267 pub fn fmpz_fdiv_q(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
268 pub fn fmpz_fdiv_r(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
269 pub fn fmpz_fdiv_q_ui(f: *mut fmpz, g: *const fmpz, h: mp_limb_t);
270 pub fn fmpz_fdiv_q_si(f: *mut fmpz, g: *const fmpz, h: mp_limb_signed_t);
271 pub fn fmpz_fdiv_q_2exp(f: *mut fmpz, g: *const fmpz, exp: mp_limb_t);
272 pub fn fmpz_fdiv_r_2exp(f: *mut fmpz, g: *const fmpz, exp: mp_limb_t);
273 pub fn fmpz_tdiv_q(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
274 pub fn fmpz_tdiv_qr(f: *mut fmpz, s: *mut fmpz, g: *const fmpz, h: *const fmpz);
275 pub fn fmpz_ndiv_qr(q: *mut fmpz, r: *mut fmpz, a: *const fmpz, b: *const fmpz);
276 pub fn fmpz_tdiv_q_ui(f: *mut fmpz, g: *const fmpz, h: mp_limb_t);
277 pub fn fmpz_tdiv_q_si(f: *mut fmpz, g: *const fmpz, h: mp_limb_signed_t);
278 pub fn fmpz_tdiv_r_2exp(f: *mut fmpz, g: *const fmpz, exp: mp_limb_t);
279 pub fn fmpz_tdiv_ui(g: *const fmpz, h: mp_limb_t) -> mp_limb_t;
280 pub fn fmpz_tdiv_q_2exp(f: *mut fmpz, g: *const fmpz, exp: mp_limb_t);
281 pub fn fmpz_preinvn_init(inv: *mut fmpz_preinvn_struct, f: *const fmpz);
282 pub fn fmpz_preinvn_clear(inv: *mut fmpz_preinvn_struct);
283 pub fn fmpz_get_d_2exp(exp: *const mp_limb_signed_t, f: *const fmpz) -> f64;
284 pub fn fmpz_set_d_2exp(f: *mut fmpz, m: f64, exp: mp_limb_signed_t);
285 pub fn fmpz_mul2_uiui(f: *mut fmpz, g: *const fmpz, h1: mp_limb_t, h2: mp_limb_t);
286 pub fn fmpz_divexact2_uiui(f: *mut fmpz, g: *const fmpz, h1: mp_limb_t, h2: mp_limb_t);
287 pub fn fmpz_mul_tdiv_q_2exp(f: *mut fmpz, g: *mut fmpz, h: *mut fmpz, exp: mp_limb_t);
288 pub fn fmpz_mul_si_tdiv_q_2exp(f: *mut fmpz, g: *mut fmpz, x: mp_limb_signed_t, exp: mp_limb_t);
289 pub fn fmpz_fac_ui(f: *mut fmpz, n: mp_limb_t);
290 pub fn fmpz_fib_ui(f: *mut fmpz, n: mp_limb_t);
291 pub fn fmpz_bin_uiui(res: *mut fmpz, n: mp_limb_t, k: mp_limb_t);
292 pub fn _fmpz_rfac_ui(r: *mut fmpz, x: *const fmpz, a: mp_limb_t, b: mp_limb_t);
293 pub fn fmpz_rfac_ui(r: *mut fmpz, x: *const fmpz, n: mp_limb_t);
294 pub fn fmpz_rfac_uiui(r: *mut fmpz, x: mp_limb_t, n: mp_limb_t);
295 pub fn fmpz_bit_pack(
296 arr: mp_ptr,
297 shift: mp_limb_t,
298 bits: mp_limb_t,
299 coeff: *mut fmpz,
300 negate: c_int,
301 borrow: c_int,
302 ) -> c_int;
303 pub fn fmpz_bit_unpack(
304 coeff: *mut fmpz,
305 arr: mp_srcptr,
306 shift: mp_limb_t,
307 bits: mp_limb_t,
308 negate: c_int,
309 borrow: c_int,
310 ) -> c_int;
311 pub fn fmpz_bit_unpack_unsigned(
312 coeff: *mut fmpz,
313 arr: mp_srcptr,
314 shift: mp_limb_t,
315 bits: mp_limb_t,
316 );
317 pub fn _fmpz_CRT_ui_precomp(
318 out: *mut fmpz,
319 r1: *mut fmpz,
320 m1: *mut fmpz,
321 r2: mp_limb_t,
322 m2: mp_limb_t,
323 m2inv: mp_limb_t,
324 m1m2: *mut fmpz,
325 c: mp_limb_t,
326 sign: c_int,
327 );
328 pub fn fmpz_CRT_ui(
329 out: *mut fmpz,
330 r1: *const fmpz,
331 m1: *const fmpz,
332 r2: mp_limb_t,
333 m2: mp_limb_t,
334 sign: c_int,
335 );
336 pub fn fmpz_CRT(
360 out: *mut fmpz,
361 r1: *const fmpz,
362 m1: *const fmpz,
363 r2: *const fmpz,
364 m2: *const fmpz,
365 sign: c_int,
366 );
367 pub fn fmpz_set_ui_smod(f: *mut fmpz, x: mp_limb_t, m: mp_limb_t);
368 pub fn fmpz_multi_crt_init(CRT: *mut fmpz_multi_crt_struct);
369 pub fn fmpz_multi_crt_precompute(
370 CRT: *mut fmpz_multi_crt_struct,
371 moduli: *const fmpz,
372 len: mp_limb_signed_t,
373 ) -> c_int;
374 pub fn fmpz_multi_crt_precompute_p(
375 CRT: *mut fmpz_multi_crt_struct,
376 moduli: *const *const fmpz,
377 len: mp_limb_signed_t,
378 ) -> c_int;
379 pub fn fmpz_multi_crt_precomp(
380 output: *mut fmpz,
381 P: *mut fmpz_multi_crt_struct,
382 inputs: *const fmpz,
383 );
384 pub fn fmpz_multi_crt_precomp_p(
385 output: *mut fmpz,
386 P: *mut fmpz_multi_crt_struct,
387 inputs: *const *const fmpz,
388 );
389 pub fn fmpz_multi_crt(
390 output: *mut fmpz,
391 moduli: *const fmpz,
392 values: *const fmpz,
393 len: mp_limb_signed_t,
394 ) -> c_int;
395 pub fn fmpz_multi_crt_clear(P: *mut fmpz_multi_crt_struct);
396 pub fn _fmpz_multi_crt_local_size(CRT: *mut fmpz_multi_crt_struct) -> mp_limb_signed_t;
397 pub fn _fmpz_multi_crt_run(
398 outputs: *mut fmpz,
399 CRT: *mut fmpz_multi_crt_struct,
400 inputs: *const fmpz,
401 );
402 pub fn _fmpz_multi_crt_run_p(
403 outputs: *mut fmpz,
404 CRT: *mut fmpz_multi_crt_struct,
405 inputs: *const *const fmpz,
406 );
407 pub fn fmpz_abs_ubound_ui_2exp(
408 exp: *mut mp_limb_signed_t,
409 x: *mut fmpz,
410 bits: c_int,
411 ) -> mp_limb_t;
412 pub fn fmpz_abs_lbound_ui_2exp(
413 exp: *mut mp_limb_signed_t,
414 x: *mut fmpz,
415 bits: c_int,
416 ) -> mp_limb_t;
417 pub fn fmpz_lucas_chain(
418 Vm: *mut fmpz,
419 Vm1: *mut fmpz,
420 A: *mut fmpz,
421 m: *mut fmpz,
422 n: *mut fmpz,
423 );
424 pub fn fmpz_lucas_chain_full(
425 Vm: *mut fmpz,
426 Vm1: *mut fmpz,
427 A: *mut fmpz,
428 B: *mut fmpz,
429 m: *mut fmpz,
430 n: *mut fmpz,
431 );
432 pub fn fmpz_lucas_chain_double(
433 U2m: *mut fmpz,
434 U2m1: *mut fmpz,
435 Um: *mut fmpz,
436 Um1: *mut fmpz,
437 A: *mut fmpz,
438 B: *mut fmpz,
439 n: *mut fmpz,
440 );
441 pub fn fmpz_lucas_chain_add(
442 Umn: *mut fmpz,
443 Umn1: *mut fmpz,
444 Um: *mut fmpz,
445 Um1: *mut fmpz,
446 Un: *mut fmpz,
447 Un1: *mut fmpz,
448 A: *mut fmpz,
449 B: *mut fmpz,
450 n: *mut fmpz,
451 );
452 pub fn fmpz_lucas_chain_mul(
453 Ukm: *mut fmpz,
454 Ukm1: *mut fmpz,
455 Um: *mut fmpz,
456 Um1: *mut fmpz,
457 A: *mut fmpz,
458 B: *mut fmpz,
459 k: *mut fmpz,
460 n: *mut fmpz,
461 );
462 pub fn fmpz_lucas_chain_VtoU(
463 Um: *mut fmpz,
464 Um1: *mut fmpz,
465 Vm: *mut fmpz,
466 Vm1: *mut fmpz,
467 A: *mut fmpz,
468 B: *mut fmpz,
469 Dinv: *mut fmpz,
470 n: *mut fmpz,
471 );
472 pub fn fmpz_is_probabprime_lucas(n: *mut fmpz) -> c_int;
473 pub fn fmpz_is_probabprime_BPSW(n: *mut fmpz) -> c_int;
474 pub fn fmpz_is_strong_probabprime(n: *mut fmpz, a: *mut fmpz) -> c_int;
475 pub fn fmpz_is_probabprime(p: *mut fmpz) -> c_int;
476 pub fn fmpz_is_prime_pseudosquare(n: *mut fmpz) -> c_int;
477 pub fn _fmpz_nm1_trial_factors(
478 n: *mut fmpz,
479 pm1: mp_ptr,
480 num_pm1: *mut mp_limb_signed_t,
481 limit: mp_limb_t,
482 );
483 pub fn fmpz_is_prime_pocklington(
484 F: *mut fmpz,
485 R: *mut fmpz,
486 n: *mut fmpz,
487 pm1: mp_ptr,
488 num_pm1: mp_limb_signed_t,
489 ) -> c_int;
490 pub fn _fmpz_np1_trial_factors(
491 n: *mut fmpz,
492 pp1: mp_ptr,
493 num_pp1: *mut mp_limb_signed_t,
494 limit: mp_limb_t,
495 );
496 pub fn fmpz_is_prime_morrison(
497 F: *mut fmpz,
498 R: *mut fmpz,
499 n: *mut fmpz,
500 pm1: mp_ptr,
501 num_pm1: mp_limb_signed_t,
502 ) -> c_int;
503 pub fn fmpz_is_prime(p: *const fmpz) -> c_int;
504 pub fn fmpz_divisor_in_residue_class_lenstra(
505 fac: *mut fmpz,
506 n: *mut fmpz,
507 r: *mut fmpz,
508 s: *mut fmpz,
509 ) -> c_int;
510 pub fn fmpz_nextprime(res: *mut fmpz, n: *const fmpz, proved: c_int);
511 pub fn fmpz_primorial(res: *mut fmpz, n: mp_limb_t);
512 pub fn fmpz_euler_phi(res: *mut fmpz, n: *const fmpz);
513 pub fn fmpz_moebius_mu(n: *const fmpz) -> c_int;
514 pub fn fmpz_divisor_sigma(res: *mut fmpz, n: *const fmpz, k: mp_limb_t);
515 pub fn n_powmod2_fmpz_preinv(
516 a: mp_limb_t,
517 exp: *mut fmpz,
518 n: mp_limb_t,
519 ninv: mp_limb_t,
520 ) -> mp_limb_t;
521 pub fn __new_fmpz() -> *mut fmpz;
523 pub fn __free_fmpz(f: *mut fmpz);
524 pub fn __fmpz_set_si(f: *mut fmpz, val: mp_limb_signed_t);
525 pub fn __fmpz_set_ui(f: *mut fmpz, val: mp_limb_t);
526 pub fn __fmpz_init(f: *mut fmpz);
527 pub fn __fmpz_init_set_ui(f: *mut fmpz, g: mp_limb_t);
528 pub fn __fmpz_clear(f: *mut fmpz);
529 pub fn __fmpz_lt(f: *mut fmpz, g: *mut fmpz) -> c_int;
530 pub fn __fmpz_gt(f: *mut fmpz, g: *mut fmpz) -> c_int;
531 pub fn __fmpz_lte(f: *mut fmpz, g: *mut fmpz) -> c_int;
532 pub fn __fmpz_gte(f: *mut fmpz, g: *mut fmpz) -> c_int;
533 pub fn __fmpz_eq(f: *mut fmpz, g: *mut fmpz) -> c_int;
534 pub fn __fmpz_neq(f: *mut fmpz, g: *mut fmpz) -> c_int;
535 pub fn __fmpz_init_set(f: *mut fmpz, g: *mut fmpz);
536 pub fn __fmpz_neg(f1: *mut fmpz, f2: *mut fmpz);
537}
538
539pub unsafe fn fmpz_tdiv_r(r: *mut fmpz, g: *const fmpz, h: *const fmpz) {
541 let mut f: fmpz = fmpz::default();
542 fmpz_init(&mut f);
543 fmpz_tdiv_qr(&mut f, r, g, h);
544 fmpz_clear(&mut f);
545}