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
All Methods Static Methods Concrete Methods 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 polyModuluscalculated 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 polyModuluscalculated using Brent & Kung algorithm for modular composition.static UnivariatePolynomialZp64compositionHorner(UnivariatePolynomialZp64 poly, UnivariatePolynomialZp64 point, UnivariatePolynomialZp64 polyModulus, UnivariateDivision.InverseModMonomial<UnivariatePolynomialZp64> invMod)Returns modular compositionpoly(point) mod polyModuluscalculated 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 polyModulusfor 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 polyModulususing precomputed monomial powersx^{i*modulus} mod polyModulusfor i in[0...degree(poly)]static UnivariatePolynomialZp64powModulusMod(UnivariatePolynomialZp64 poly, UnivariatePolynomialZp64 polyModulus, UnivariateDivision.InverseModMonomial<UnivariatePolynomialZp64> invMod, ArrayList<UnivariatePolynomialZp64> xPowers)Returnspoly^modulus mod polyModulususing precomputed monomial powersx^{i*modulus} mod polyModulusfor 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 polyModulususing precomputed monomial powersx^{i*modulus} mod polyModulusfor i in[0...degree(poly)]static <T extends IUnivariatePolynomial<T>>
ArrayList<T>xPowers(T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod)Returnsx^{i*modulus} mod polyModulusfor i in[0...degree], wheredegreeispolyModulusdegree.
-
-
-
Method Detail
-
xPowers
public static <T extends IUnivariatePolynomial<T>> ArrayList<T> xPowers(T polyModulus, UnivariateDivision.InverseModMonomial<T> invMod)
Returnsx^{i*modulus} mod polyModulusfor i in[0...degree], wheredegreeispolyModulusdegree.- Parameters:
polyModulus- the monic modulusinvMod- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial))- Returns:
x^{i*modulus} mod polyModulusfor i in[0...degree], wheredegreeispolyModulusdegree- 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 polyModulusfor i in[0...nIterations]- Parameters:
poly- the polynomialpolyModulus- the monic polynomial modulusinvMod- pre-conditioned modulus (UnivariateDivision.fastDivisionPreConditioning(IUnivariatePolynomial))- Returns:
poly^{i} mod polyModulusfor 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 polyModulususing precomputed monomial powersx^{i*modulus} mod polyModulusfor 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 polyModulusfor 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 polyModulususing precomputed monomial powersx^{i*modulus} mod polyModulusfor 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 polyModulusfor 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 polyModulususing precomputed monomial powersx^{i*modulus} mod polyModulusfor 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 polyModulusfor 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 polyModuluscalculated using Brent & Kung algorithm for modular composition.- Parameters:
poly- the polynomialpointPowers- precomputed powers of evaluation pointpoint^{i} mod polyModuluspolyModulus- 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 polyModuluscalculated 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 polyModuluscalculated 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)
-
-