edu.jas.poly
Class AlgebraicNumberRing<C extends GcdRingElem<C>>

java.lang.Object
  extended by edu.jas.poly.AlgebraicNumberRing<C>
All Implemented Interfaces:
AbelianGroupFactory<AlgebraicNumber<C>>, ElemFactory<AlgebraicNumber<C>>, MonoidFactory<AlgebraicNumber<C>>, RingFactory<AlgebraicNumber<C>>, java.io.Serializable, java.lang.Iterable<AlgebraicNumber<C>>

public class AlgebraicNumberRing<C extends GcdRingElem<C>>
extends java.lang.Object
implements RingFactory<AlgebraicNumber<C>>, java.lang.Iterable<AlgebraicNumber<C>>

Algebraic number factory class based on GenPolynomial with RingElem interface. Objects of this class are immutable.

Author:
Heinz Kredel
See Also:
Serialized Form

Field Summary
protected  int isField
          Indicator if this ring is a field
 GenPolynomial<C> modul
          Module part of the factory data structure.
 GenPolynomialRing<C> ring
          Ring part of the factory data structure.
 
Constructor Summary
AlgebraicNumberRing(GenPolynomial<C> m)
          The constructor creates a AlgebraicNumber factory object from a GenPolynomial objects module.
AlgebraicNumberRing(GenPolynomial<C> m, boolean isField)
          The constructor creates a AlgebraicNumber factory object from a GenPolynomial objects module.
 
Method Summary
 java.math.BigInteger characteristic()
          Characteristic of this ring.
 AlgebraicNumber<C> chineseRemainder(AlgebraicNumber<C> c, AlgebraicNumber<C> ci, AlgebraicNumber<C> a)
          AlgebraicNumber chinese remainder algorithm.
 AlgebraicNumber<C> copy(AlgebraicNumber<C> c)
          Copy AlgebraicNumber element c.
 int depth()
          Depth of extension field tower.
 boolean equals(java.lang.Object b)
          Comparison with any other object.
 long extensionDegree()
          Degree of extension field.
 AlgebraicNumber<C> fillFromInteger(java.math.BigInteger a)
          Get a AlgebraicNumber element from a BigInteger value.
 AlgebraicNumber<C> fillFromInteger(long a)
          Get a AlgebraicNumber element from a long value.
 AlgebraicNumber<C> fromInteger(java.math.BigInteger a)
          Get a AlgebraicNumber element from a BigInteger value.
 AlgebraicNumber<C> fromInteger(long a)
          Get a AlgebraicNumber element from a long value.
 java.util.List<AlgebraicNumber<C>> generators()
          Get a list of the generating elements.
 int getField()
          Get the internal field indicator.
 AlgebraicNumber<C> getGenerator()
          Get the generating element.
 GenPolynomial<C> getModul()
          Get the module part.
 AlgebraicNumber<C> getONE()
          Get the one element.
 AlgebraicNumber<C> getZERO()
          Get the zero element.
 int hashCode()
          Hash code for this AlgebraicNumber.
 AlgebraicNumber<C> interpolate(AlgebraicNumber<C> c, C ci, C am, C a)
          AlgebraicNumber interpolation algorithm.
 boolean isAssociative()
          Query if this ring is associative.
 boolean isCommutative()
          Query if this ring is commutative.
 boolean isField()
          Query if this ring is a field.
 boolean isFinite()
          Is this structure finite or infinite.
 java.util.Iterator<AlgebraicNumber<C>> iterator()
          Get a AlgebraicNumber iterator.
 AlgebraicNumber<C> parse(java.io.Reader r)
          Parse AlgebraicNumber from Reader.
 AlgebraicNumber<C> parse(java.lang.String s)
          Parse AlgebraicNumber from String.
 AlgebraicNumber<C> random(int n)
          AlgebraicNumber random.
 AlgebraicNumber<C> random(int n, java.util.Random rnd)
          AlgebraicNumber random.
 void setField(boolean field)
          Set field property of this ring.
 java.lang.String toScript()
          Get a scripting compatible string representation.
 java.lang.String toString()
          Get the String representation as RingFactory.
 long totalExtensionDegree()
          Total degree of nested extension fields.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

ring

public final GenPolynomialRing<C extends GcdRingElem<C>> ring
Ring part of the factory data structure.


modul

public final GenPolynomial<C extends GcdRingElem<C>> modul
Module part of the factory data structure.


isField

protected int isField
Indicator if this ring is a field

Constructor Detail

AlgebraicNumberRing

public AlgebraicNumberRing(GenPolynomial<C> m)
The constructor creates a AlgebraicNumber factory object from a GenPolynomial objects module.

Parameters:
m - module GenPolynomial.

AlgebraicNumberRing

public AlgebraicNumberRing(GenPolynomial<C> m,
                           boolean isField)
The constructor creates a AlgebraicNumber factory object from a GenPolynomial objects module.

Parameters:
m - module GenPolynomial.
isField - indicator if m is prime.
Method Detail

getModul

public GenPolynomial<C> getModul()
Get the module part.

Returns:
modul.

copy

public AlgebraicNumber<C> copy(AlgebraicNumber<C> c)
Copy AlgebraicNumber element c.

Specified by:
copy in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Parameters:
c - algebraic number to copy.
Returns:
a copy of c.

getZERO

public AlgebraicNumber<C> getZERO()
Get the zero element.

Specified by:
getZERO in interface AbelianGroupFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
0 as AlgebraicNumber.

getONE

public AlgebraicNumber<C> getONE()
Get the one element.

Specified by:
getONE in interface MonoidFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
1 as AlgebraicNumber.

getGenerator

public AlgebraicNumber<C> getGenerator()
Get the generating element.

Returns:
alpha as AlgebraicNumber.

generators

public java.util.List<AlgebraicNumber<C>> generators()
Get a list of the generating elements.

Specified by:
generators in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
list of generators for the algebraic structure.
See Also:
ElemFactory.generators()

isFinite

public boolean isFinite()
Is this structure finite or infinite.

Specified by:
isFinite in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
true if this structure is finite, else false.
See Also:
ElemFactory.isFinite()

isCommutative

public boolean isCommutative()
Query if this ring is commutative.

Specified by:
isCommutative in interface MonoidFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
true if this ring is commutative, else false.

isAssociative

public boolean isAssociative()
Query if this ring is associative.

Specified by:
isAssociative in interface MonoidFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
true if this ring is associative, else false.

isField

public boolean isField()
Query if this ring is a field.

Specified by:
isField in interface RingFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
true if modul is prime, else false.

setField

public void setField(boolean field)
Set field property of this ring.

Parameters:
field - true, if this ring is determined to be a field, false, if it is determined that it is not a field.

getField

public int getField()
Get the internal field indicator.

Returns:
internal field indicator.

characteristic

public java.math.BigInteger characteristic()
Characteristic of this ring.

Specified by:
characteristic in interface RingFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
characteristic of this ring.

fillFromInteger

public AlgebraicNumber<C> fillFromInteger(java.math.BigInteger a)
Get a AlgebraicNumber element from a BigInteger value.

Parameters:
a - BigInteger.
Returns:
a AlgebraicNumber.

fillFromInteger

public AlgebraicNumber<C> fillFromInteger(long a)
Get a AlgebraicNumber element from a long value.

Parameters:
a - long.
Returns:
a AlgebraicNumber.

fromInteger

public AlgebraicNumber<C> fromInteger(java.math.BigInteger a)
Get a AlgebraicNumber element from a BigInteger value.

Specified by:
fromInteger in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Parameters:
a - BigInteger.
Returns:
a AlgebraicNumber.

fromInteger

public AlgebraicNumber<C> fromInteger(long a)
Get a AlgebraicNumber element from a long value.

Specified by:
fromInteger in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Parameters:
a - long.
Returns:
a AlgebraicNumber.

toString

public java.lang.String toString()
Get the String representation as RingFactory.

Overrides:
toString in class java.lang.Object
See Also:
Object.toString()

toScript

public java.lang.String toScript()
Get a scripting compatible string representation.

Specified by:
toScript in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
script compatible representation for this ElemFactory.
See Also:
ElemFactory.toScript()

equals

public boolean equals(java.lang.Object b)
Comparison with any other object.

Overrides:
equals in class java.lang.Object
See Also:
Object.equals(java.lang.Object)

hashCode

public int hashCode()
Hash code for this AlgebraicNumber.

Overrides:
hashCode in class java.lang.Object
See Also:
Object.hashCode()

random

public AlgebraicNumber<C> random(int n)
AlgebraicNumber random.

Specified by:
random in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Parameters:
n - such that 0 ≤ v ≤ (2n-1).
Returns:
a random integer mod modul.

random

public AlgebraicNumber<C> random(int n,
                                 java.util.Random rnd)
AlgebraicNumber random.

Specified by:
random in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Parameters:
n - such that 0 ≤ v ≤ (2n-1).
rnd - is a source for random bits.
Returns:
a random integer mod modul.

parse

public AlgebraicNumber<C> parse(java.lang.String s)
Parse AlgebraicNumber from String.

Specified by:
parse in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Parameters:
s - String.
Returns:
AlgebraicNumber from s.

parse

public AlgebraicNumber<C> parse(java.io.Reader r)
Parse AlgebraicNumber from Reader.

Specified by:
parse in interface ElemFactory<AlgebraicNumber<C extends GcdRingElem<C>>>
Parameters:
r - Reader.
Returns:
next AlgebraicNumber from r.

chineseRemainder

public AlgebraicNumber<C> chineseRemainder(AlgebraicNumber<C> c,
                                           AlgebraicNumber<C> ci,
                                           AlgebraicNumber<C> a)
AlgebraicNumber chinese remainder algorithm. Assert deg(c.modul) >= deg(a.modul) and c.modul * a.modul = this.modul.

Parameters:
c - AlgebraicNumber.
ci - inverse of c.modul in ring of a.
a - other AlgebraicNumber.
Returns:
S, with S mod c.modul == c and S mod a.modul == a.

interpolate

public AlgebraicNumber<C> interpolate(AlgebraicNumber<C> c,
                                      C ci,
                                      C am,
                                      C a)
AlgebraicNumber interpolation algorithm. Assert deg(c.modul) >= deg(A.modul) and c.modul * A.modul = this.modul. Special case with deg(A.modul) == 1. Similar algorithm as chinese remainder algortihm.

Parameters:
c - AlgebraicNumber.
ci - inverse of (c.modul)(a) in ring of A.
am - trailing base coefficient of modul of other AlgebraicNumber A.
a - value of other AlgebraicNumber A.
Returns:
S, with S(c) == c and S(A) == a.

depth

public int depth()
Depth of extension field tower.

Returns:
number of nested algebraic extension fields

extensionDegree

public long extensionDegree()
Degree of extension field.

Returns:
degree of this algebraic extension field

totalExtensionDegree

public long totalExtensionDegree()
Total degree of nested extension fields.

Returns:
degree of tower of algebraic extension fields

iterator

public java.util.Iterator<AlgebraicNumber<C>> iterator()
Get a AlgebraicNumber iterator. Note: Only for finite field coefficients or fields which are iterable.

Specified by:
iterator in interface java.lang.Iterable<AlgebraicNumber<C extends GcdRingElem<C>>>
Returns:
a iterator over all algebraic numbers in this ring.