public class MultipleFieldExtension<Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> extends ImageRing<sPoly,mPoly> implements IPolynomialRing<mPoly>
F(α_1, α_2, ..., α_N). Elements are represented as multivariate polynomials over
(α_1, α_2, ..., α_N); internally all arithmetic operations are performed by switching to appropriate simple
field extension F(γ) (accessible via getSimpleExtension() method) where γ is some primitive
element (accessible via getPrimitiveElement() method) computed automatically. Representation of generating
algebraic elements α_i as elements of this simple extension can be obtained via getGeneratorRep(int)
method. Originally, generators are represented by their minimal polynomials over F(α_1, α_2, ..., α_i)
("tower" representation). To construct multiple field extensions one should use #mkMultipleExtension(...) and
joinAlgebraicElement(UnivariatePolynomial).imageFunc, inverseFunc, ring| Constructor and Description |
|---|
MultipleFieldExtension(MultipleFieldExtension<Term,mPoly,sPoly>[] tower,
UnivariatePolynomial<mPoly>[] minimalPolynomialsOfGenerators,
mPoly primitiveElement,
sPoly[] generatorsReps,
SimpleFieldExtension<sPoly> simpleExtension) |
| Modifier and Type | Method and Description |
|---|---|
mPoly |
copy(mPoly element)
Makes a deep copy of the specified element (for immutable instances the same reference returned).
|
int |
degree()
Returns the degree of this filed extension (that is the degree of primitive element)
|
boolean |
equals(Object o) |
mPoly[] |
extendedGCD(mPoly a,
mPoly b)
Returns array of
[gcd(a,b), s, t] such that s * a + t * b = gcd(a, b) |
mPoly |
factorial(long num)
Gives a product of {@code valueOf(1) * valueOf(2) * ....
|
mPoly |
factory()
Factory polynomial
|
mPoly |
gcd(Iterable<mPoly> elements)
Returns greatest common divisor of specified elements
|
mPoly |
gcd(mPoly... elements)
Returns greatest common divisor of specified elements
|
mPoly |
gcd(mPoly a,
mPoly b)
Returns the greatest common divisor of two elements
|
UnivariatePolynomial<mPoly> |
getGeneratorMinimalPoly(int iGenerator)
Returns minimal polynomial corresponding to i-th generator.
|
sPoly |
getGeneratorRep(int iGenerator)
Returns representation of i-th generator as element of simple field extension generated by primitive element
getPrimitiveElement() |
sPoly[] |
getGeneratorReps()
Returns representation of generators as elements of simple field extension generated by primitive element
getPrimitiveElement() |
mPoly |
getOne()
Returns unit element of this ring (one)
|
mPoly |
getPrimitiveElement()
Returns the primitive element of this multiple field extension
|
SimpleFieldExtension<sPoly> |
getSimpleExtension()
Returns the isomorphic simple field extension generated by
getPrimitiveElement() |
MultipleFieldExtension<Term,mPoly,sPoly> |
getSubExtension(int i)
Returns the i-th extension from the tower
|
sPoly |
getUnivariateFactory() |
mPoly |
getZero()
Returns zero element of this ring
|
int |
hashCode() |
boolean |
isOne(mPoly element)
Tests whether specified element is one (exactly)
|
boolean |
isUnit(mPoly element)
Tests whether specified element is a ring unit
|
boolean |
isZero(mPoly element)
Tests whether specified element is zero
|
MultipleFieldExtension<Term,mPoly,sPoly> |
joinAlgebraicElement(sPoly minimalPoly)
Adds algebraic element given by its minimal polynomial (not checked that it is irreducible) to this.
|
MultipleFieldExtension<Term,mPoly,sPoly> |
joinAlgebraicElement(UnivariatePolynomial<mPoly> algebraicElement)
Adds algebraic element given by its minimal polynomial (not checked that it is irreducible) to this.
|
MultipleFieldExtension<Term,mPoly,sPoly> |
joinRedundantElement(mPoly element)
Adds algebraic element given by its minimal polynomial (not checked that it is irreducible) to this.
|
mPoly |
lcm(mPoly a,
mPoly b)
Returns the least common multiple of two elements
|
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkMultipleExtension(SimpleFieldExtension<sPoly> ext) |
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkMultipleExtension(sPoly... minimalPolynomials)
Creates multiple field extension
F(α_1, α_2, ..., α_i) where α_i are specified by their minimal
polynomials over F. |
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkMultipleExtension(sPoly a) |
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkSplittingField(sPoly poly)
Constructs splitting field for a given polynomial.
|
int |
nVariables()
Number of polynomial variables
|
int |
signum(mPoly element)
Returns -1 if
element < 0, 0 if element == 0 and 1 if element > 0, where comparison is
specified by Comparator.compare(Object, Object) |
String |
toString() |
String |
toString(IStringifier stringifier)
convert this to string with the use of stringifier
|
String |
toString(String... variables) |
mPoly |
valueOf(long val)
Returns ring element associated with specified
long |
mPoly |
valueOfBigInteger(BigInteger val)
Returns ring element associated with specified integer
|
mPoly |
variable(int variable)
Creates poly representing a single specified variable
|
abs, add, add, cardinality, characteristic, compare, decrement, divideAndRemainder, factor, factorSquareFree, image, image, increment, inverse, inverse, isEuclideanRing, isField, isPerfectPower, iterator, multiply, multiply, negate, parse, perfectPowerBase, perfectPowerExponent, pow, pow, pow, quotient, randomElement, reciprocal, remainder, subtract, valueOfclone, finalize, getClass, notify, notifyAll, wait, wait, waitmkCoder, parseabs, add, add, addMutable, cardinality, characteristic, createArray, createArray, createArray, createArray, createArray2d, createArray2d, createZeroesArray, createZeroesArray2d, decrement, divideAndRemainder, divideExact, divideExactMutable, divideOrNull, factor, factorSquareFree, fillZeros, firstBezoutCoefficient, getNegativeOne, increment, isEuclideanRing, isField, isFinite, isFiniteField, isMinusOne, isPerfectPower, isUnitOrZero, iterator, lcm, lcm, max, min, multiply, multiply, multiply, multiply, multiplyMutable, negate, negateMutable, parse, perfectPowerBase, perfectPowerExponent, pow, pow, pow, quotient, randomElement, randomElement, randomElementTree, randomElementTree, randomNonZeroElement, reciprocal, remainder, setToValueOf, subtract, subtractMutable, valueOf, valueOfcompare, comparing, comparing, comparingDouble, comparingInt, comparingLong, naturalOrder, nullsFirst, nullsLast, reversed, reverseOrder, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLongforEach, spliteratorpublic MultipleFieldExtension(MultipleFieldExtension<Term,mPoly,sPoly>[] tower, UnivariatePolynomial<mPoly>[] minimalPolynomialsOfGenerators, mPoly primitiveElement, sPoly[] generatorsReps, SimpleFieldExtension<sPoly> simpleExtension)
public int nVariables()
IPolynomialRingnVariables in interface IPolynomialRing<mPoly extends AMultivariatePolynomial<Term,mPoly>>public mPoly factory()
IPolynomialRingfactory in interface IPolynomialRing<mPoly extends AMultivariatePolynomial<Term,mPoly>>public mPoly variable(int variable)
IPolynomialRingvariable in interface IPolynomialRing<mPoly extends AMultivariatePolynomial<Term,mPoly>>public sPoly getUnivariateFactory()
public mPoly getPrimitiveElement()
public int degree()
public SimpleFieldExtension<sPoly> getSimpleExtension()
getPrimitiveElement()public UnivariatePolynomial<mPoly> getGeneratorMinimalPoly(int iGenerator)
public MultipleFieldExtension<Term,mPoly,sPoly> getSubExtension(int i)
public sPoly getGeneratorRep(int iGenerator)
getPrimitiveElement()public sPoly[] getGeneratorReps()
getPrimitiveElement()public MultipleFieldExtension<Term,mPoly,sPoly> joinAlgebraicElement(UnivariatePolynomial<mPoly> algebraicElement)
public MultipleFieldExtension<Term,mPoly,sPoly> joinAlgebraicElement(sPoly minimalPoly)
public MultipleFieldExtension<Term,mPoly,sPoly> joinRedundantElement(mPoly element)
public mPoly valueOf(long val)
RinglongvalueOf in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>valueOf in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>val - machine integerlongpublic mPoly valueOfBigInteger(BigInteger val)
RingvalueOfBigInteger in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>valueOfBigInteger in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>val - integerpublic mPoly getZero()
RinggetZero in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>getZero in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>public mPoly getOne()
RinggetOne in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>getOne in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>public mPoly copy(mPoly element)
Ringcopy in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>copy in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>element - the elementpublic boolean isZero(mPoly element)
RingisZero in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>isZero in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>element - the ring elementpublic boolean isOne(mPoly element)
RingisOne in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>isOne in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>element - the ring elementRing.isUnit(Object)public boolean isUnit(mPoly element)
RingisUnit in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>isUnit in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>element - the ring elementRing.isOne(Object)public mPoly gcd(mPoly a, mPoly b)
Ringgcd in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>gcd in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>a - the first elementb - the second elementpublic mPoly[] extendedGCD(mPoly a, mPoly b)
Ring[gcd(a,b), s, t] such that s * a + t * b = gcd(a, b)extendedGCD in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>extendedGCD in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>public mPoly lcm(mPoly a, mPoly b)
Ringlcm in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>lcm in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>a - the first elementb - the second elementpublic mPoly gcd(mPoly... elements)
Ringgcd in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>gcd in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>elements - the elementspublic mPoly gcd(Iterable<mPoly> elements)
Ringgcd in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>gcd in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>elements - the elementspublic int signum(mPoly element)
Ringelement < 0, 0 if element == 0 and 1 if element > 0, where comparison is
specified by Comparator.compare(Object, Object)signum in interface IPolynomialRing<mPoly extends AMultivariatePolynomial<Term,mPoly>>signum in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>signum in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>element - the elementelement < 0, 0 if element == 0 and 1 otherwisepublic mPoly factorial(long num)
RingvalueOf(1) * valueOf(2) * .... * valueOf(num) factorial in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>factorial in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>num - the numbervalueOf(1) * valueOf(2) * .... * valueOf(num) public boolean equals(Object o)
equals in interface Comparator<mPoly extends AMultivariatePolynomial<Term,mPoly>>equals in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>public int hashCode()
hashCode in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>public String toString(IStringifier stringifier)
StringifiabletoString in interface Stringifiable<mPoly extends AMultivariatePolynomial<Term,mPoly>>public static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> MultipleFieldExtension<Term,mPoly,sPoly> mkMultipleExtension(sPoly a)
public static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> MultipleFieldExtension<Term,mPoly,sPoly> mkMultipleExtension(SimpleFieldExtension<sPoly> ext)
public static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> MultipleFieldExtension<Term,mPoly,sPoly> mkMultipleExtension(sPoly... minimalPolynomials)
F(α_1, α_2, ..., α_i) where α_i are specified by their minimal
polynomials over F.
NOTE: it is not tested that specified minimal polynomials are irreducible
minimalPolynomials - minimal polynomials of algebraic elementspublic static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> MultipleFieldExtension<Term,mPoly,sPoly> mkSplittingField(sPoly poly)
Copyright © 2022. All rights reserved.