use libc::*;
use crate::deps::*;
use crate::flint::*;
use crate::fmpz_types::*;
#[repr(C)]
pub struct ecm_s {
pub t: nn_ptr,
pub u: nn_ptr,
pub v: nn_ptr,
pub w: nn_ptr,
pub x: nn_ptr,
pub z: nn_ptr,
pub a24: nn_ptr,
pub ninv: nn_ptr,
pub one: nn_ptr,
pub GCD_table: *mut libc::c_uchar,
pub prime_table: *mut *mut libc::c_uchar,
pub n_size: ulong,
pub normbits: ulong,
}
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
const _: () = {
["Size of ecm_s"][::std::mem::size_of::<ecm_s>() - 104usize];
["Alignment of ecm_s"][::std::mem::align_of::<ecm_s>() - 8usize];
["Offset of field: ecm_s::t"][::std::mem::offset_of!(ecm_s, t) - 0usize];
["Offset of field: ecm_s::u"][::std::mem::offset_of!(ecm_s, u) - 8usize];
["Offset of field: ecm_s::v"][::std::mem::offset_of!(ecm_s, v) - 16usize];
["Offset of field: ecm_s::w"][::std::mem::offset_of!(ecm_s, w) - 24usize];
["Offset of field: ecm_s::x"][::std::mem::offset_of!(ecm_s, x) - 32usize];
["Offset of field: ecm_s::z"][::std::mem::offset_of!(ecm_s, z) - 40usize];
["Offset of field: ecm_s::a24"][::std::mem::offset_of!(ecm_s, a24) - 48usize];
["Offset of field: ecm_s::ninv"][::std::mem::offset_of!(ecm_s, ninv) - 56usize];
["Offset of field: ecm_s::one"][::std::mem::offset_of!(ecm_s, one) - 64usize];
["Offset of field: ecm_s::GCD_table"][::std::mem::offset_of!(ecm_s, GCD_table) - 72usize];
["Offset of field: ecm_s::prime_table"][::std::mem::offset_of!(ecm_s, prime_table) - 80usize];
["Offset of field: ecm_s::n_size"][::std::mem::offset_of!(ecm_s, n_size) - 88usize];
["Offset of field: ecm_s::normbits"][::std::mem::offset_of!(ecm_s, normbits) - 96usize];
};
impl Default for ecm_s {
fn default() -> Self {
let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
unsafe {
::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
s.assume_init()
}
}
}
pub type ecm_t = [ecm_s; 1usize];
extern "C" {
pub fn fmpz_factor_init(factor: *mut fmpz_factor_struct);
pub fn fmpz_factor_clear(factor: *mut fmpz_factor_struct);
pub fn _fmpz_factor_fit_length(factor: *mut fmpz_factor_struct, len: slong);
pub fn _fmpz_factor_set_length(factor: *mut fmpz_factor_struct, newlen: slong);
pub fn _fmpz_factor_append(factor: *mut fmpz_factor_struct, p: *const fmpz, exp: ulong);
pub fn _fmpz_factor_append_ui(factor: *mut fmpz_factor_struct, p: ulong, exp: ulong);
pub fn _fmpz_factor_concat(
factor1: *mut fmpz_factor_struct,
factor2: *mut fmpz_factor_struct,
exp: ulong,
);
pub fn fmpz_factor_fprint(fs: *mut FILE, factor: *const fmpz_factor_struct) -> libc::c_int;
pub fn fmpz_factor_print(factor: *const fmpz_factor_struct) -> libc::c_int;
pub fn _fmpz_factor_extend_factor_ui(factor: *mut fmpz_factor_struct, n: ulong);
pub fn fmpz_factor_trial_range(
factor: *mut fmpz_factor_struct,
n: *const fmpz,
start: ulong,
num_primes: ulong,
) -> libc::c_int;
pub fn fmpz_factor_trial(
factor: *mut fmpz_factor_struct,
n: *const fmpz,
num_primes: slong,
) -> libc::c_int;
pub fn fmpz_factor_no_trial(factor: *mut fmpz_factor_struct, n: *const fmpz);
pub fn fmpz_factor_si(factor: *mut fmpz_factor_struct, n: slong);
pub fn fmpz_factor(factor: *mut fmpz_factor_struct, n: *const fmpz);
pub fn fmpz_factor_smooth(
factor: *mut fmpz_factor_struct,
n: *const fmpz,
bits: slong,
proved: libc::c_int,
) -> libc::c_int;
pub fn fmpz_factor_pp1(
factor: *mut fmpz,
n: *const fmpz,
B1: ulong,
B2_sqrt: ulong,
c: ulong,
) -> libc::c_int;
pub fn fmpz_factor_refine(res: *mut fmpz_factor_struct, f: *const fmpz_factor_struct);
pub fn flint_mpn_sqr_and_add_a(
y: nn_ptr,
a: nn_ptr,
n: nn_ptr,
n_size: ulong,
ninv: nn_ptr,
normbits: ulong,
);
pub fn flint_mpn_factor_pollard_brent_single(
factor: nn_ptr,
n: nn_ptr,
ninv: nn_ptr,
a: nn_ptr,
y: nn_ptr,
n_size: ulong,
normbits: ulong,
max_iters: ulong,
) -> libc::c_int;
pub fn fmpz_factor_pollard_brent_single(
p_factor: *mut fmpz,
n_in: *mut fmpz,
yi: *mut fmpz,
ai: *mut fmpz,
max_iters: ulong,
) -> libc::c_int;
pub fn fmpz_factor_pollard_brent(
factor: *mut fmpz,
state: *mut flint_rand_struct,
n: *mut fmpz,
max_tries: ulong,
max_iters: ulong,
) -> libc::c_int;
pub fn fmpz_factor_expand_iterative(n: *mut fmpz, factor: *const fmpz_factor_struct);
pub fn fmpz_factor_expand_multiexp(n: *mut fmpz, factor: *const fmpz_factor_struct);
pub fn fmpz_factor_expand(n: *mut fmpz, factor: *const fmpz_factor_struct);
pub fn fmpz_factor_euler_phi(res: *mut fmpz, fac: *const fmpz_factor_struct);
pub fn fmpz_factor_moebius_mu(fac: *const fmpz_factor_struct) -> libc::c_int;
pub fn fmpz_factor_divisor_sigma(res: *mut fmpz, k: ulong, fac: *const fmpz_factor_struct);
pub fn fmpz_factor_ecm_init(ecm_inf: *mut ecm_s, sz: ulong);
pub fn fmpz_factor_ecm_clear(ecm_inf: *mut ecm_s);
pub fn fmpz_factor_ecm_double(
x: nn_ptr,
z: nn_ptr,
x0: nn_ptr,
z0: nn_ptr,
n: nn_ptr,
ecm_inf: *mut ecm_s,
);
pub fn fmpz_factor_ecm_add(
x: nn_ptr,
z: nn_ptr,
x1: nn_ptr,
z1: nn_ptr,
x2: nn_ptr,
z2: nn_ptr,
x0: nn_ptr,
z0: nn_ptr,
n: nn_ptr,
ecm_inf: *mut ecm_s,
);
pub fn fmpz_factor_ecm_mul_montgomery_ladder(
x: nn_ptr,
z: nn_ptr,
x0: nn_ptr,
z0: nn_ptr,
k: ulong,
n: nn_ptr,
ecm_inf: *mut ecm_s,
);
pub fn fmpz_factor_ecm_select_curve(
f: nn_ptr,
sig: nn_ptr,
n: nn_ptr,
ecm_inf: *mut ecm_s,
) -> libc::c_int;
pub fn fmpz_factor_ecm_stage_I(
f: nn_ptr,
prime_array: *const ulong,
num: ulong,
B1: ulong,
n: nn_ptr,
ecm_inf: *mut ecm_s,
) -> libc::c_int;
pub fn fmpz_factor_ecm_stage_II(
f: nn_ptr,
B1: ulong,
B2: ulong,
P: ulong,
n: nn_ptr,
ecm_inf: *mut ecm_s,
) -> libc::c_int;
pub fn fmpz_factor_ecm(
f: *mut fmpz,
curves: ulong,
B1: ulong,
B2: ulong,
state: *mut flint_rand_struct,
n_in: *const fmpz,
) -> libc::c_int;
pub fn fmpz_factor_get_fmpz(z: *mut fmpz, factor: *const fmpz_factor_struct, i: slong);
}