1#![allow(non_camel_case_types)]
2#![allow(non_snake_case)]
3
4use crate::deps::*;
7use crate::flint::*;
8use crate::fmpz::fmpz;
9use libc::{c_int, c_uchar};
10
11#[repr(C)]
12#[derive(Debug, Copy, Clone)]
13pub struct fmpz_factor_struct {
14 pub sign: c_int,
15 pub p: *mut fmpz,
16 pub exp: *mut mp_limb_t,
17 pub alloc: mp_limb_signed_t,
18 pub num: mp_limb_signed_t,
19}
20
21pub type fmpz_factor_t = [fmpz_factor_struct; 1usize];
22
23#[repr(C)]
24#[derive(Debug, Copy, Clone)]
25pub struct ecm_s {
26 pub t: mp_ptr,
27 pub u: mp_ptr,
28 pub v: mp_ptr,
29 pub w: mp_ptr,
30 pub x: mp_ptr,
31 pub z: mp_ptr,
32 pub a24: mp_ptr,
33 pub ninv: mp_ptr,
34 pub one: mp_ptr,
35 pub GCD_table: *mut c_uchar,
36 pub prime_table: *mut *mut c_uchar,
37 pub n_size: mp_limb_t,
38 pub normbits: mp_limb_t,
39}
40
41pub type ecm_t = [ecm_s; 1usize];
42
43extern "C" {
44 pub fn fmpz_factor_init(factor: *mut fmpz_factor_struct);
45 pub fn fmpz_factor_clear(factor: *mut fmpz_factor_struct);
46 pub fn fmpz_factor_print(factor: *const fmpz_factor_struct);
47 pub fn _fmpz_factor_fit_length(factor: *mut fmpz_factor_struct, len: mp_limb_signed_t);
48 pub fn _fmpz_factor_append_ui(factor: *mut fmpz_factor_struct, p: mp_limb_t, exp: mp_limb_t);
49 pub fn _fmpz_factor_append(factor: *mut fmpz_factor_struct, p: *const fmpz, exp: mp_limb_t);
50 pub fn _fmpz_factor_set_length(factor: *mut fmpz_factor_struct, newlen: mp_limb_signed_t);
51 pub fn _fmpz_factor_concat(
52 factor1: *mut fmpz_factor_struct,
53 factor2: *const fmpz_factor_struct,
54 exp: mp_limb_t,
55 );
56 pub fn _fmpz_factor_extend_factor_ui(factor: *mut fmpz_factor_struct, n: mp_limb_t);
57 pub fn fmpz_factor_trial_range(
58 factor: *mut fmpz_factor_struct,
59 n: *const fmpz,
60 start: mp_limb_t,
61 num_primes: mp_limb_t,
62 ) -> c_int;
63 pub fn fmpz_factor_trial(
64 factor: *mut fmpz_factor_struct,
65 n: *const fmpz,
66 num_primes: mp_limb_signed_t,
67 ) -> c_int;
68 pub fn fmpz_factor(factor: *mut fmpz_factor_struct, n: *const fmpz);
69 pub fn fmpz_factor_no_trial(factor: *mut fmpz_factor_struct, n: *const fmpz);
70 pub fn fmpz_factor_smooth(
71 factor: *mut fmpz_factor_struct,
72 n: *const fmpz,
73 bits: mp_limb_signed_t,
74 proved: c_int,
75 ) -> c_int;
76 pub fn fmpz_factor_si(factor: *mut fmpz_factor_struct, n: mp_limb_signed_t);
77 pub fn fmpz_factor_pp1(
78 factor: *mut fmpz,
79 n: *const fmpz,
80 B1: mp_limb_t,
81 B2_sqrt: mp_limb_t,
82 c: mp_limb_t,
83 ) -> c_int;
84 pub fn fmpz_factor_refine(res: *mut fmpz_factor_struct, f: *const fmpz_factor_struct);
85 pub fn flint_mpn_sqr_and_add_a(
86 y: mp_ptr,
87 a: mp_ptr,
88 n: mp_ptr,
89 n_size: mp_limb_t,
90 ninv: mp_ptr,
91 normbits: mp_limb_t,
92 );
93 pub fn flint_mpn_factor_pollard_brent_single(
94 factor: mp_ptr,
95 n: mp_ptr,
96 ninv: mp_ptr,
97 a: mp_ptr,
98 y: mp_ptr,
99 n_size: mp_limb_t,
100 normbits: mp_limb_t,
101 max_iters: mp_limb_t,
102 ) -> c_int;
103 pub fn fmpz_factor_pollard_brent_single(
104 p_factor: *mut fmpz,
105 n_in: *const fmpz,
106 yi: *const fmpz,
107 ai: *const fmpz,
108 max_iters: mp_limb_t,
109 ) -> c_int;
110 pub fn fmpz_factor_pollard_brent(
111 factor: *mut fmpz,
112 state: *const flint_rand_s,
113 n: *const fmpz,
114 max_tries: mp_limb_t,
115 max_iters: mp_limb_t,
116 ) -> c_int;
117 pub fn fmpz_factor_expand_iterative(n: *mut fmpz, factor: *const fmpz_factor_struct);
118 pub fn fmpz_factor_expand_multiexp(n: *mut fmpz, factor: *const fmpz_factor_struct);
119 pub fn fmpz_factor_expand(n: *mut fmpz, factor: *const fmpz_factor_struct);
120 pub fn fmpz_factor_euler_phi(res: *mut fmpz, fac: *const fmpz_factor_struct);
121 pub fn fmpz_factor_moebius_mu(fac: *const fmpz_factor_struct) -> c_int;
122 pub fn fmpz_factor_divisor_sigma(res: *mut fmpz, fac: *const fmpz_factor_struct, k: mp_limb_t);
123 pub fn fmpz_factor_ecm_init(ecm_inf: *mut ecm_s, sz: mp_limb_t);
124 pub fn fmpz_factor_ecm_clear(ecm_inf: *mut ecm_s);
125 pub fn fmpz_factor_ecm_addmod(a: mp_ptr, b: mp_ptr, c: mp_ptr, n: mp_ptr, n_size: mp_limb_t);
126 pub fn fmpz_factor_ecm_submod(x: mp_ptr, a: mp_ptr, b: mp_ptr, n: mp_ptr, n_size: mp_limb_t);
127 pub fn fmpz_factor_ecm_double(
128 x: mp_ptr,
129 z: mp_ptr,
130 x0: mp_ptr,
131 z0: mp_ptr,
132 n: mp_ptr,
133 ecm_inf: *const ecm_s,
134 );
135 pub fn fmpz_factor_ecm_add(
136 x: mp_ptr,
137 z: mp_ptr,
138 x1: mp_ptr,
139 z1: mp_ptr,
140 x2: mp_ptr,
141 z2: mp_ptr,
142 x0: mp_ptr,
143 z0: mp_ptr,
144 n: mp_ptr,
145 ecm_inf: *const ecm_s,
146 );
147 pub fn fmpz_factor_ecm_mul_montgomery_ladder(
148 x: mp_ptr,
149 z: mp_ptr,
150 x0: mp_ptr,
151 z0: mp_ptr,
152 k: mp_limb_t,
153 n: mp_ptr,
154 ecm_inf: *const ecm_s,
155 );
156 pub fn fmpz_factor_ecm_select_curve(
157 f: mp_ptr,
158 sig: mp_ptr,
159 n: mp_ptr,
160 ecm_inf: *const ecm_s,
161 ) -> c_int;
162 pub fn fmpz_factor_ecm_stage_I(
163 f: mp_ptr,
164 prime_array: *const mp_limb_t,
165 num: mp_limb_t,
166 B1: mp_limb_t,
167 n: mp_ptr,
168 ecm_inf: *const ecm_s,
169 ) -> c_int;
170 pub fn fmpz_factor_ecm_stage_II(
171 f: mp_ptr,
172 B1: mp_limb_t,
173 B2: mp_limb_t,
174 P: mp_limb_t,
175 n: mp_ptr,
176 ecm_inf: *const ecm_s,
177 ) -> c_int;
178 pub fn fmpz_factor_ecm(
179 f: *mut fmpz,
180 curves: mp_limb_t,
181 B1: mp_limb_t,
182 B2: mp_limb_t,
183 state: *const flint_rand_s,
184 n_in: *const fmpz,
185 ) -> c_int;
186 pub fn fmpz_factor_get_fmpz(
187 z: *mut fmpz,
188 factor: *const fmpz_factor_struct,
189 i: mp_limb_signed_t,
190 );
191}