competitive/math/
mod.rs

1//! mathematical datas
2
3use crate::algebra::{
4    AddMulOperation, Associative, Field, Group, Invertible, Magma, Monoid, Ring, SemiRing, Unital,
5};
6use crate::array;
7use crate::num::{
8    BarrettReduction, Complex, MInt, MIntBase, MIntConvert, One, Unsigned, Wrapping, Zero,
9    montgomery,
10};
11use crate::tools::{AssociatedValue, PartialIgnoredOrd, Xorshift};
12
13#[codesnip::entry("berlekamp_massey")]
14pub use self::berlekamp_massey::berlekamp_massey;
15#[codesnip::entry("bitwise_transform")]
16pub use self::bitwise_transform::bitwise_transform;
17#[codesnip::entry("BitwiseandConvolve")]
18pub use self::bitwiseand_convolve::BitwiseandConvolve;
19#[codesnip::entry("BitwiseorConvolve")]
20pub use self::bitwiseor_convolve::BitwiseorConvolve;
21#[codesnip::entry("BitwisexorConvolve")]
22pub use self::bitwisexor_convolve::BitwisexorConvolve;
23#[codesnip::entry("ConvolveSteps")]
24pub use self::convolve_steps::ConvolveSteps;
25#[codesnip::entry("discrete_logarithm")]
26pub use self::discrete_logarithm::{discrete_logarithm, discrete_logarithm_prime_mod};
27pub use self::factorial::*;
28#[codesnip::entry("fast_fourier_transform")]
29pub use self::fast_fourier_transform::ConvolveRealFft;
30#[codesnip::entry("floor_sum")]
31pub use self::floor_sum::{
32    floor_sum, floor_sum_i64, floor_sum_polynomial, floor_sum_polynomial_i64, floor_sum_range_freq,
33};
34#[codesnip::entry("FormalPowerSeries")]
35pub use self::formal_power_series::{
36    FormalPowerSeries, FormalPowerSeriesCoefficient, FormalPowerSeriesCoefficientSqrt, Fps,
37    Fps998244353,
38};
39pub use self::gcd::*;
40#[codesnip::entry("GcdConvolve")]
41pub use self::gcd_convolve::GcdConvolve;
42#[codesnip::entry("lagrange_interpolation")]
43pub use self::lagrange_interpolation::{lagrange_interpolation, lagrange_interpolation_polynomial};
44#[codesnip::entry("LcmConvolve")]
45pub use self::lcm_convolve::LcmConvolve;
46#[codesnip::entry("linear_congruence")]
47pub use self::linear_congruence::{solve_linear_congruence, solve_simultaneous_linear_congruence};
48#[codesnip::entry("Matrix")]
49pub use self::matrix::Matrix;
50#[codesnip::entry("miller_rabin")]
51pub use self::miller_rabin::{miller_rabin, miller_rabin_with_br};
52#[codesnip::entry("NumberTheoreticTransform")]
53pub use self::number_theoretic_transform::{Convolve, Convolve998244353, MIntConvolve};
54pub use self::polynomial::*;
55pub use self::prime::*;
56#[codesnip::entry("prime_factors")]
57pub use self::prime_factors::{divisors, prime_factors, prime_factors_flatten};
58#[codesnip::entry("PrimeList")]
59pub use self::prime_list::{PrimeList, with_prime_list};
60#[codesnip::entry("PrimeTable")]
61pub use self::prime_table::PrimeTable;
62#[codesnip::entry("primitive_root")]
63pub use self::primitive_root::{check_primitive_root, primitive_root};
64#[codesnip::entry("QuotientArray")]
65pub use self::quotient_array::QuotientArray;
66#[codesnip::entry("SubsetConvolve")]
67pub use self::subset_convolve::SubsetConvolve;
68
69#[cfg_attr(nightly, codesnip::entry("berlekamp_massey", include("zero_one")))]
70mod berlekamp_massey;
71#[cfg_attr(nightly, codesnip::entry("bitwise_transform"))]
72mod bitwise_transform;
73#[cfg_attr(
74    nightly,
75    codesnip::entry("BitwiseandConvolve", include("_zeta_transform", "bitwise_transform"))
76)]
77mod bitwiseand_convolve;
78#[cfg_attr(
79    nightly,
80    codesnip::entry("BitwiseorConvolve", include("_zeta_transform", "bitwise_transform"))
81)]
82mod bitwiseor_convolve;
83#[cfg_attr(
84    nightly,
85    codesnip::entry("BitwisexorConvolve", include("_zeta_transform", "bitwise_transform"))
86)]
87mod bitwisexor_convolve;
88#[cfg_attr(nightly, codesnip::entry("ConvolveSteps"))]
89mod convolve_steps;
90#[cfg_attr(
91    nightly,
92    codesnip::entry(
93        "discrete_logarithm",
94        include(
95            "BarrettReduction",
96            "lcm",
97            "modinv",
98            "primitive_root",
99            "PrimeList",
100            "Xorshift"
101        )
102    )
103)]
104mod discrete_logarithm;
105mod factorial;
106#[cfg_attr(
107    nightly,
108    codesnip::entry(
109        "fast_fourier_transform",
110        include("Complex", "AssociatedValue", "ConvolveSteps")
111    )
112)]
113mod fast_fourier_transform;
114#[cfg_attr(
115    nightly,
116    codesnip::entry("floor_sum", include("algebra", "ring", "integer", "BarrettReduction"))
117)]
118mod floor_sum;
119#[cfg_attr(
120    nightly,
121    codesnip::entry(
122        "FormalPowerSeries",
123        include(
124            "NumberTheoreticTransform",
125            "montgomery",
126            "mod_sqrt",
127            "factorial",
128            "PartialIgnoredOrd",
129            "berlekamp_massey"
130        )
131    )
132)]
133mod formal_power_series;
134mod gcd;
135#[cfg_attr(
136    nightly,
137    codesnip::entry("GcdConvolve", include("_zeta_transform", "PrimeList"))
138)]
139mod gcd_convolve;
140#[cfg_attr(
141    nightly,
142    codesnip::entry("lagrange_interpolation", include("factorial", "MIntBase"))
143)]
144mod lagrange_interpolation;
145#[cfg_attr(
146    nightly,
147    codesnip::entry("LcmConvolve", include("_zeta_transform", "PrimeList"))
148)]
149mod lcm_convolve;
150#[cfg_attr(nightly, codesnip::entry(include("integer")))]
151mod linear_congruence;
152#[cfg_attr(nightly, codesnip::entry("Matrix", include("zero_one")))]
153mod matrix;
154#[cfg_attr(nightly, codesnip::entry("miller_rabin", include("BarrettReduction")))]
155mod miller_rabin;
156#[cfg_attr(nightly, codesnip::entry("mod_sqrt", include("MIntBase")))]
157mod mod_sqrt;
158#[cfg_attr(
159    nightly,
160    codesnip::entry(
161        "NumberTheoreticTransform",
162        include("montgomery", "ConvolveSteps", "avx_helper")
163    )
164)]
165mod number_theoretic_transform;
166mod polynomial;
167mod prime;
168#[cfg_attr(
169    nightly,
170    codesnip::entry("prime_factors", include("miller_rabin", "gcd"))
171)]
172mod prime_factors;
173#[cfg_attr(nightly, codesnip::entry("PrimeList"))]
174mod prime_list;
175#[cfg_attr(nightly, codesnip::entry("PrimeTable"))]
176mod prime_table;
177#[cfg_attr(nightly, codesnip::entry("primitive_root", include("prime_factors")))]
178mod primitive_root;
179#[cfg_attr(
180    nightly,
181    codesnip::entry("QuotientArray", include("algebra", "ring", "PrimeList"))
182)]
183mod quotient_array;
184#[cfg_attr(
185    nightly,
186    codesnip::entry("SubsetConvolve", include("BitwiseorConvolve"))
187)]
188mod subset_convolve;
189
190#[codesnip::entry("_zeta_transform", include("algebra", "ring", "ConvolveSteps"))]
191#[codesnip::skip]
192#[allow(dead_code)]
193#[doc(hidden)]
194enum ZetaTransformSnippets {}