Package cc.redberry.rings.poly.univar
Class ModularComposition
- java.lang.Object
-
- cc.redberry.rings.poly.univar.ModularComposition
-
public final class ModularComposition extends Object
Univariate polynomial modular composition.- Since:
- 1.0
-
-
Method Summary
Modifier and Type Method Description static <T extends IUnivariatePolynomial<T>>
Tcomposition(T poly, T point, T polyModulus)
Returns modular compositionpoly(point) mod polyModulus
.static <T extends IUnivariatePolynomial<T>>
Tcomposition(T poly, T point, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod)
Returns modular compositionpoly(point) mod polyModulus
.static <T extends IUnivariatePolynomial<T>>
TcompositionBrentKung(T poly, ArrayList<T> pointPowers, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod, int tBrentKung)
Returns modular compositionpoly(point) mod polyModulus
calculated using Brent & Kung algorithm for modular composition.static <T extends IUnivariatePolynomial<T>>
TcompositionBrentKung(T poly, T point, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod)
Returns modular compositionpoly(point) mod polyModulus
calculated using Brent & Kung algorithm for modular composition.static UnivariatePolynomialZp64
compositionHorner(UnivariatePolynomialZp64 poly, UnivariatePolynomialZp64 point, UnivariatePolynomialZp64 polyModulus, UnivariateDivision.InverseModMonomial<UnivariatePolynomialZp64> invMod)
Returns modular compositionpoly(point) mod polyModulus
calculated with plain Horner scheme.static <T extends IUnivariatePolynomial<T>>
ArrayList<T>polyPowers(T poly, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod, int nIterations)
Returnspoly^{i} mod polyModulus
for i in[0...nIterations]
static <E> UnivariatePolynomial<E>
powModulusMod(UnivariatePolynomial<E> poly, UnivariatePolynomial<E> polyModulus, UnivariateDivision.InverseModMonomial<UnivariatePolynomial<E>> invMod, ArrayList<UnivariatePolynomial<E>> xPowers)
Returnspoly^modulus mod polyModulus
using precomputed monomial powersx^{i*modulus} mod polyModulus
for i in[0...degree(poly)]
static UnivariatePolynomialZp64
powModulusMod(UnivariatePolynomialZp64 poly, UnivariatePolynomialZp64 polyModulus, UnivariateDivision.InverseModMonomial<UnivariatePolynomialZp64> invMod, ArrayList<UnivariatePolynomialZp64> xPowers)
Returnspoly^modulus mod polyModulus
using precomputed monomial powersx^{i*modulus} mod polyModulus
for i in[0...degree(poly)]
static <T extends IUnivariatePolynomial<T>>
TpowModulusMod(T poly, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod, ArrayList<T> xPowers)
Returnspoly^modulus mod polyModulus
using precomputed monomial powersx^{i*modulus} mod polyModulus
for i in[0...degree(poly)]
static <T extends IUnivariatePolynomial<T>>
ArrayList<T>xPowers(T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod)
Returnsx^{i*modulus} mod polyModulus
for i in[0...degree]
, wheredegree
ispolyModulus
degree.
-
-
-
Method Detail
-
xPowers
public static <T extends IUnivariatePolynomial<T>> ArrayList<T> xPowers(T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod)
Returnsx^{i*modulus} mod polyModulus
for i in[0...degree]
, wheredegree
ispolyModulus
degree.- Parameters:
polyModulus
- the monic modulusinvMod
- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
)- Returns:
x^{i*modulus} mod polyModulus
for i in[0...degree]
, wheredegree
ispolyModulus
degree- See Also:
UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
polyPowers
public static <T extends IUnivariatePolynomial<T>> ArrayList<T> polyPowers(T poly, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod, int nIterations)
Returnspoly^{i} mod polyModulus
for i in[0...nIterations]
- Parameters:
poly
- the polynomialpolyModulus
- the monic polynomial modulusinvMod
- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
)- Returns:
poly^{i} mod polyModulus
for i in[0...nIterations]
- See Also:
UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
powModulusMod
public static UnivariatePolynomialZp64 powModulusMod(UnivariatePolynomialZp64 poly, UnivariatePolynomialZp64 polyModulus, UnivariateDivision.InverseModMonomial<UnivariatePolynomialZp64> invMod, ArrayList<UnivariatePolynomialZp64> xPowers)
Returnspoly^modulus mod polyModulus
using precomputed monomial powersx^{i*modulus} mod polyModulus
for i in[0...degree(poly)]
- Parameters:
poly
- the polynomialpolyModulus
- the monic polynomial modulusinvMod
- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
)xPowers
- precomputed monomial powersx^{i*modulus} mod polyModulus
for i in[0...degree(poly)]
- Returns:
poly^modulus mod polyModulus
- See Also:
xPowers(IUnivariatePolynomial, UnivariateDivision.InverseModMonomial)
,UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
powModulusMod
public static <E> UnivariatePolynomial<E> powModulusMod(UnivariatePolynomial<E> poly, UnivariatePolynomial<E> polyModulus, UnivariateDivision.InverseModMonomial<UnivariatePolynomial<E>> invMod, ArrayList<UnivariatePolynomial<E>> xPowers)
Returnspoly^modulus mod polyModulus
using precomputed monomial powersx^{i*modulus} mod polyModulus
for i in[0...degree(poly)]
- Parameters:
poly
- the polynomialpolyModulus
- the monic polynomial modulusinvMod
- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
)xPowers
- precomputed monomial powersx^{i*modulus} mod polyModulus
for i in[0...degree(poly)]
- Returns:
poly^modulus mod polyModulus
- See Also:
xPowers(IUnivariatePolynomial, UnivariateDivision.InverseModMonomial)
,UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
powModulusMod
public static <T extends IUnivariatePolynomial<T>> T powModulusMod(T poly, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod, ArrayList<T> xPowers)
Returnspoly^modulus mod polyModulus
using precomputed monomial powersx^{i*modulus} mod polyModulus
for i in[0...degree(poly)]
- Parameters:
poly
- the polynomialpolyModulus
- the monic polynomial modulusinvMod
- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
)xPowers
- precomputed monomial powersx^{i*modulus} mod polyModulus
for i in[0...degree(poly)]
- Returns:
poly^modulus mod polyModulus
- See Also:
xPowers(IUnivariatePolynomial, UnivariateDivision.InverseModMonomial)
,UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
compositionBrentKung
public static <T extends IUnivariatePolynomial<T>> T compositionBrentKung(T poly, ArrayList<T> pointPowers, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod, int tBrentKung)
Returns modular compositionpoly(point) mod polyModulus
calculated using Brent & Kung algorithm for modular composition.- Parameters:
poly
- the polynomialpointPowers
- precomputed powers of evaluation pointpoint^{i} mod polyModulus
polyModulus
- the monic polynomial modulusinvMod
- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
)tBrentKung
- Brent-Kung splitting parameter (optimal choice is ~sqrt(main.degree))- Returns:
- modular composition
poly(point) mod polyModulus
- See Also:
polyPowers(IUnivariatePolynomial, IUnivariatePolynomial, UnivariateDivision.InverseModMonomial, int)
,UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
compositionBrentKung
public static <T extends IUnivariatePolynomial<T>> T compositionBrentKung(T poly, T point, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod)
Returns modular compositionpoly(point) mod polyModulus
calculated using Brent & Kung algorithm for modular composition.- Parameters:
poly
- the polynomialpoint
- the evaluation pointpolyModulus
- the monic polynomial modulusinvMod
- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
)})- Returns:
- modular composition
poly(point) mod polyModulus
- See Also:
UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
compositionHorner
public static UnivariatePolynomialZp64 compositionHorner(UnivariatePolynomialZp64 poly, UnivariatePolynomialZp64 point, UnivariatePolynomialZp64 polyModulus, UnivariateDivision.InverseModMonomial<UnivariatePolynomialZp64> invMod)
Returns modular compositionpoly(point) mod polyModulus
calculated with plain Horner scheme.- Parameters:
poly
- the polynomialpoint
- the evaluation pointpolyModulus
- the monic polynomial modulusinvMod
- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
)})- Returns:
- modular composition
poly(point) mod polyModulus
- See Also:
UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
composition
public static <T extends IUnivariatePolynomial<T>> T composition(T poly, T point, T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod)
Returns modular compositionpoly(point) mod polyModulus
. Brent & Kung algorithm used (compositionBrentKung(IUnivariatePolynomial, ArrayList, IUnivariatePolynomial, UnivariateDivision.InverseModMonomial, int)
- Parameters:
poly
- the polynomialpoint
- the evaluation pointpolyModulus
- the monic polynomial modulusinvMod
- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
)- Returns:
- modular composition
poly(point) mod polyModulus
- See Also:
polyPowers(IUnivariatePolynomial, IUnivariatePolynomial, UnivariateDivision.InverseModMonomial, int)
,UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
composition
public static <T extends IUnivariatePolynomial<T>> T composition(T poly, T point, T polyModulus)
Returns modular compositionpoly(point) mod polyModulus
. Brent & Kung algorithm used (compositionBrentKung(IUnivariatePolynomial, ArrayList, IUnivariatePolynomial, UnivariateDivision.InverseModMonomial, int)
- Parameters:
poly
- the polynomialpoint
- the evaluation pointpolyModulus
- the monic polynomial modulus- Returns:
- modular composition
poly(point) mod polyModulus
- See Also:
polyPowers(IUnivariatePolynomial, IUnivariatePolynomial, UnivariateDivision.InverseModMonomial, int)
,UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial)
-
-