Package cc.redberry.rings.poly
Class UnivariateRing<Poly extends IUnivariatePolynomial<Poly>>
- java.lang.Object
-
- cc.redberry.rings.ARing<Poly>
-
- cc.redberry.rings.poly.UnivariateRing<Poly>
-
- Type Parameters:
Poly
- type of univariate polynomials
- All Implemented Interfaces:
IParser<Poly>
,Stringifiable<Poly>
,IPolynomialRing<Poly>
,Ring<Poly>
,Serializable
,Iterable<Poly>
,Comparator<Poly>
public final class UnivariateRing<Poly extends IUnivariatePolynomial<Poly>> extends ARing<Poly>
Ring of univariate polynomials.- Since:
- 1.0
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static int
MAX_DEGREE_OF_RANDOM_POLY
The maximal degree of polynomial generated withrandomElement(RandomGenerator)
static int
MIN_DEGREE_OF_RANDOM_POLY
The minimal degree of polynomial generated withrandomElement(RandomGenerator)
-
Constructor Summary
Constructors Constructor Description UnivariateRing(Poly factory)
Creates ring of univariate polynomials which support operations over univariate polynomials of the type same as of providedfactory
polynomial
-
Method Summary
Modifier and Type Method Description Poly
add(Poly a, Poly b)
Add two elementsPoly
addMutable(Poly a, Poly b)
Adds two elements and destroys the initial content ofa
.BigInteger
cardinality()
Returns the number of elements in this ring (cardinality) or null if ring is infiniteBigInteger
characteristic()
Returns characteristic of this ringint
compare(Poly o1, Poly o2)
Poly
copy(Poly element)
Makes a deep copy of the specified element (for immutable instances the same reference returned).Poly[]
divideAndRemainder(Poly a, Poly b)
Returns quotient and remainder ofdividend / divider
boolean
equals(Object o)
Poly[]
extendedGCD(Poly a, Poly b)
Returns array of[gcd(a,b), s, t]
such thats * a + t * b = gcd(a, b)
PolynomialFactorDecomposition<Poly>
factor(Poly element)
Factor specified elementPolynomialFactorDecomposition<Poly>
factorSquareFree(Poly element)
Square-free factorization of specified elementPoly
factory()
Factory polynomialPoly[]
firstBezoutCoefficient(Poly a, Poly b)
Returns array of[gcd(a,b), s]
such thats * a + t * b = gcd(a, b)
Poly
gcd(Poly a, Poly b)
Returns the greatest common divisor of two elementsPoly
getOne()
Returns unit element of this ring (one)Poly
getZero()
Returns zero element of this ringint
hashCode()
boolean
isEuclideanRing()
Returns whether this ring is a Euclidean ringboolean
isField()
Returns whether this ring is a fieldboolean
isOne(Poly element)
Tests whether specified element is one (exactly)boolean
isUnit(Poly element)
Tests whether specified element is a ring unitboolean
isZero(Poly element)
Tests whether specified element is zeroIterator<Poly>
iterator()
Returns iterator over ring elements (for finite rings, otherwise throws exception)Poly
multiply(Poly a, Poly b)
Multiplies two elementsPoly
multiplyMutable(Poly a, Poly b)
Multiplies two elements and destroys the initial content ofa
Poly
negate(Poly element)
Negates the given elementPoly
negateMutable(Poly element)
Negates the given element and destroys the initial content ofelement
int
nVariables()
Number of polynomial variablesPoly
parse(String string)
Parse string into ring elementPoly
pow(Poly base, BigInteger exponent)
Returnsbase
in a power ofexponent
(non negative)Poly
randomElement(int minDegree, int maxDegree, org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the degree randomly picked fromminDegree
(inclusive) tomaxDegree
(exclusive)Poly
randomElement(int degree, org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the specified degreePoly
randomElement(org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the degree randomly picked fromMIN_DEGREE_OF_RANDOM_POLY
(inclusive) toMAX_DEGREE_OF_RANDOM_POLY
(exclusive)Poly
randomElementTree(int minDegree, int maxDegree, org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the degree randomly picked fromminDegree
(inclusive) tomaxDegree
(exclusive) and coefficients generated viaRing.randomElementTree(RandomGenerator)
methodPoly
randomElementTree(org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the degree randomly picked fromMIN_DEGREE_OF_RANDOM_POLY
(inclusive) toMAX_DEGREE_OF_RANDOM_POLY
(exclusive)Poly
reciprocal(Poly element)
Gives the inverse elementelement ^ (-1)
Poly
remainder(Poly a, Poly b)
Returns the remainder ofdividend / divider
Poly
subtract(Poly a, Poly b)
Subtractsb
froma
Poly
subtractMutable(Poly a, Poly b)
Subtractsb
froma
and destroys the initial content ofa
String
toString()
String
toString(IStringifier<Poly> stringifier)
convert this to string with the use of stringifierString
toString(String... variables)
Poly
valueOf(long val)
Returns ring element associated with specifiedlong
Poly
valueOf(Poly val)
Converts a value from other ring to this ring.Poly
valueOfBigInteger(BigInteger val)
Returns ring element associated with specified integerPoly
variable(int variable)
Creates poly representing a single specified variable-
Methods inherited from class cc.redberry.rings.ARing
isPerfectPower, perfectPowerBase, perfectPowerExponent
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Comparator
reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Methods inherited from interface cc.redberry.rings.poly.IPolynomialRing
mkCoder, parse, signum
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Methods inherited from interface cc.redberry.rings.Ring
abs, add, createArray, createArray, createArray, createArray, createArray2d, createArray2d, createZeroesArray, createZeroesArray2d, decrement, divideExact, divideExactMutable, divideOrNull, factorial, fillZeros, gcd, gcd, getNegativeOne, increment, isFinite, isFiniteField, isMinusOne, isPerfectPower, isUnitOrZero, lcm, lcm, lcm, max, min, multiply, multiply, multiply, perfectPowerBase, perfectPowerExponent, pow, pow, quotient, randomElement, randomElementTree, randomNonZeroElement, setToValueOf, valueOf
-
-
-
-
Field Detail
-
MIN_DEGREE_OF_RANDOM_POLY
public static final int MIN_DEGREE_OF_RANDOM_POLY
The minimal degree of polynomial generated withrandomElement(RandomGenerator)
- See Also:
- Constant Field Values
-
MAX_DEGREE_OF_RANDOM_POLY
public static final int MAX_DEGREE_OF_RANDOM_POLY
The maximal degree of polynomial generated withrandomElement(RandomGenerator)
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
UnivariateRing
public UnivariateRing(Poly factory)
Creates ring of univariate polynomials which support operations over univariate polynomials of the type same as of providedfactory
polynomial- Parameters:
factory
- factory polynomial (the exact value offactory
is irrelevant)
-
-
Method Detail
-
nVariables
public int nVariables()
Description copied from interface:IPolynomialRing
Number of polynomial variables
-
remainder
public Poly remainder(Poly a, Poly b)
Description copied from interface:Ring
Returns the remainder ofdividend / divider
- Parameters:
a
- the dividendb
- the divider- Returns:
- the remainder of
dividend / divider
-
divideAndRemainder
public Poly[] divideAndRemainder(Poly a, Poly b)
Description copied from interface:Ring
Returns quotient and remainder ofdividend / divider
- Parameters:
a
- the dividendb
- the divider- Returns:
{quotient, remainder}
-
gcd
public Poly gcd(Poly a, Poly b)
Description copied from interface:Ring
Returns the greatest common divisor of two elements- Parameters:
a
- the first elementb
- the second element- Returns:
- gcd
-
extendedGCD
public Poly[] extendedGCD(Poly a, Poly b)
Description copied from interface:Ring
Returns array of[gcd(a,b), s, t]
such thats * a + t * b = gcd(a, b)
-
firstBezoutCoefficient
public Poly[] firstBezoutCoefficient(Poly a, Poly b)
Description copied from interface:Ring
Returns array of[gcd(a,b), s]
such thats * a + t * b = gcd(a, b)
- Parameters:
a
- the first ring element (for which the Bezout coefficient is computed)b
- the second ring element- Returns:
- array of
[gcd(a,b), s]
such thats * a + t * b = gcd(a, b)
-
factorSquareFree
public PolynomialFactorDecomposition<Poly> factorSquareFree(Poly element)
Description copied from interface:Ring
Square-free factorization of specified element
-
factor
public PolynomialFactorDecomposition<Poly> factor(Poly element)
Description copied from interface:Ring
Factor specified element
-
variable
public Poly variable(int variable)
Description copied from interface:IPolynomialRing
Creates poly representing a single specified variable
-
randomElement
public Poly randomElement(int minDegree, int maxDegree, org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the degree randomly picked fromminDegree
(inclusive) tomaxDegree
(exclusive)- Parameters:
minDegree
- the minimal degree of the resultmaxDegree
- the maximal degree of the resultrnd
- the source of randomness- Returns:
- random univariate polynomial with the degree randomly picked from
minDegree
(inclusive) tomaxDegree
(exclusive) - See Also:
RandomUnivariatePolynomials
-
randomElement
public Poly randomElement(int degree, org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the specified degree- Parameters:
degree
- the degree of the resultrnd
- the source of randomness- Returns:
- random univariate polynomial with the specified degree
-
randomElement
public Poly randomElement(org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the degree randomly picked fromMIN_DEGREE_OF_RANDOM_POLY
(inclusive) toMAX_DEGREE_OF_RANDOM_POLY
(exclusive)- Parameters:
rnd
- the source of randomness- Returns:
- random univariate polynomial
-
randomElementTree
public Poly randomElementTree(int minDegree, int maxDegree, org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the degree randomly picked fromminDegree
(inclusive) tomaxDegree
(exclusive) and coefficients generated viaRing.randomElementTree(RandomGenerator)
method- Parameters:
minDegree
- the minimal degree of the resultmaxDegree
- the maximal degree of the resultrnd
- the source of randomness- Returns:
- random univariate polynomial with the degree randomly picked from
minDegree
(inclusive) tomaxDegree
(exclusive) - See Also:
RandomUnivariatePolynomials
-
randomElementTree
public Poly randomElementTree(org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random univariate polynomial with the degree randomly picked fromMIN_DEGREE_OF_RANDOM_POLY
(inclusive) toMAX_DEGREE_OF_RANDOM_POLY
(exclusive)- Parameters:
rnd
- the source of randomness- Returns:
- random univariate polynomial
-
factory
public Poly factory()
Description copied from interface:IPolynomialRing
Factory polynomial- Specified by:
factory
in interfaceIPolynomialRing<Poly extends IPolynomial<Poly>>
-
isEuclideanRing
public boolean isEuclideanRing()
Description copied from interface:Ring
Returns whether this ring is a Euclidean ring- Specified by:
isEuclideanRing
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- whether this ring is a Euclidean ring
-
isField
public final boolean isField()
Description copied from interface:Ring
Returns whether this ring is a field- Specified by:
isField
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- whether this ring is a field
-
cardinality
public final BigInteger cardinality()
Description copied from interface:Ring
Returns the number of elements in this ring (cardinality) or null if ring is infinite- Specified by:
cardinality
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- the number of elements in this ring (cardinality) or null if ring is infinite
-
characteristic
public final BigInteger characteristic()
Description copied from interface:Ring
Returns characteristic of this ring- Specified by:
characteristic
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- characteristic of this ring
-
add
public final Poly add(Poly a, Poly b)
Description copied from interface:Ring
Add two elements- Specified by:
add
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first elementb
- the second element- Returns:
- a + b
-
subtract
public final Poly subtract(Poly a, Poly b)
Description copied from interface:Ring
Subtractsb
froma
- Specified by:
subtract
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first elementb
- the second element- Returns:
- a - b
-
multiply
public final Poly multiply(Poly a, Poly b)
Description copied from interface:Ring
Multiplies two elements- Specified by:
multiply
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first elementb
- the second element- Returns:
- a * b
-
negate
public final Poly negate(Poly element)
Description copied from interface:Ring
Negates the given element- Specified by:
negate
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element- Returns:
- -val
-
pow
public Poly pow(Poly base, BigInteger exponent)
Description copied from interface:Ring
Returnsbase
in a power ofexponent
(non negative)- Specified by:
pow
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
base
- baseexponent
- exponent (non negative)- Returns:
base
in a power ofexponent
-
addMutable
public Poly addMutable(Poly a, Poly b)
Description copied from interface:Ring
Adds two elements and destroys the initial content ofa
.- Specified by:
addMutable
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first element (may be destroyed)b
- the second element- Returns:
- a + b
-
subtractMutable
public Poly subtractMutable(Poly a, Poly b)
Description copied from interface:Ring
Subtractsb
froma
and destroys the initial content ofa
- Specified by:
subtractMutable
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first element (may be destroyed)b
- the second element- Returns:
- a - b
-
multiplyMutable
public Poly multiplyMutable(Poly a, Poly b)
Description copied from interface:Ring
Multiplies two elements and destroys the initial content ofa
- Specified by:
multiplyMutable
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first element (may be destroyed)b
- the second element- Returns:
- a * b
-
negateMutable
public Poly negateMutable(Poly element)
Description copied from interface:Ring
Negates the given element and destroys the initial content ofelement
- Specified by:
negateMutable
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element (may be destroyed)- Returns:
- -element
-
reciprocal
public final Poly reciprocal(Poly element)
Description copied from interface:Ring
Gives the inverse elementelement ^ (-1)
- Specified by:
reciprocal
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the element- Returns:
element ^ (-1)
-
getZero
public final Poly getZero()
Description copied from interface:Ring
Returns zero element of this ring- Specified by:
getZero
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- 0
-
getOne
public final Poly getOne()
Description copied from interface:Ring
Returns unit element of this ring (one)- Specified by:
getOne
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- 1
-
isZero
public final boolean isZero(Poly element)
Description copied from interface:Ring
Tests whether specified element is zero- Specified by:
isZero
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element- Returns:
- whether specified element is zero
-
isOne
public final boolean isOne(Poly element)
Description copied from interface:Ring
Tests whether specified element is one (exactly)- Specified by:
isOne
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element- Returns:
- whether specified element is exactly one
- See Also:
Ring.isUnit(Object)
-
isUnit
public boolean isUnit(Poly element)
Description copied from interface:Ring
Tests whether specified element is a ring unit- Specified by:
isUnit
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element- Returns:
- whether specified element is a ring unit
- See Also:
Ring.isOne(Object)
-
valueOf
public final Poly valueOf(long val)
Description copied from interface:Ring
Returns ring element associated with specifiedlong
- Specified by:
valueOf
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
val
- machine integer- Returns:
- ring element associated with specified
long
-
valueOfBigInteger
public Poly valueOfBigInteger(BigInteger val)
Description copied from interface:Ring
Returns ring element associated with specified integer- Specified by:
valueOfBigInteger
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
val
- integer- Returns:
- ring element associated with specified integer
-
valueOf
public final Poly valueOf(Poly val)
Description copied from interface:Ring
Converts a value from other ring to this ring. The result is not guarantied to be a new instance (i.e.val == valueOf(val)
is possible).- Specified by:
valueOf
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
val
- some element from any ring- Returns:
- this ring element associated with specified
val
-
copy
public Poly copy(Poly element)
Description copied from interface:Ring
Makes a deep copy of the specified element (for immutable instances the same reference returned).- Specified by:
copy
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the element- Returns:
- deep copy of specified element
-
compare
public final int compare(Poly o1, Poly o2)
- Specified by:
compare
in interfaceComparator<Poly extends IPolynomial<Poly>>
-
equals
public final boolean equals(Object o)
- Specified by:
equals
in interfaceComparator<Poly extends IPolynomial<Poly>>
- Overrides:
equals
in classObject
-
iterator
public Iterator<Poly> iterator()
Description copied from interface:Ring
Returns iterator over ring elements (for finite rings, otherwise throws exception)- Specified by:
iterator
in interfaceIterable<Poly extends IPolynomial<Poly>>
- Specified by:
iterator
in interfaceRing<Poly extends IPolynomial<Poly>>
-
parse
public Poly parse(String string)
Description copied from interface:Ring
Parse string into ring element- Specified by:
parse
in interfaceIParser<Poly extends IPolynomial<Poly>>
- Specified by:
parse
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
string
- string- Returns:
- ring element
- See Also:
Coder
-
toString
public String toString(IStringifier<Poly> stringifier)
Description copied from interface:Stringifiable
convert this to string with the use of stringifier- Specified by:
toString
in interfaceStringifiable<Poly extends IPolynomial<Poly>>
-
-