
edu.jas.gbufd.MultiplicativeSetFactors Maven / Gradle / Ivy
The newest version!
/*
* $Id: MultiplicativeSetFactors.java 4061 2012-07-27 12:03:20Z kredel $
*/
package edu.jas.gbufd;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import edu.jas.poly.GenPolynomial;
import edu.jas.poly.GenPolynomialRing;
import edu.jas.poly.PolyUtil;
import edu.jas.structure.GcdRingElem;
import edu.jas.ufd.FactorAbstract;
import edu.jas.ufd.FactorFactory;
/**
* Multiplicative set of irreducible polynomials. a, b in M implies a*b in M, 1
* in M.
* @param coefficient type
* @author Heinz Kredel.
*/
public class MultiplicativeSetFactors> extends MultiplicativeSet {
private static final Logger logger = Logger.getLogger(MultiplicativeSetFactors.class);
//private final boolean debug = logger.isDebugEnabled();
/**
* Factors decomposition engine.
*/
protected final FactorAbstract engine;
/**
* MultiplicativeSet constructor. Constructs an empty multiplicative set.
* @param ring polynomial ring factory for coefficients.
*/
public MultiplicativeSetFactors(GenPolynomialRing ring) {
super(ring);
engine = FactorFactory.getImplementation(ring.coFac);
}
/**
* MultiplicativeSet constructor.
* @param ring polynomial ring factory for coefficients.
* @param ms a list of non-zero polynomials.
* @param eng factorization engine.
*/
protected MultiplicativeSetFactors(GenPolynomialRing ring, List> ms,
FactorAbstract eng) {
super(ring, ms);
engine = eng;
}
/**
* toString.
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "MultiplicativeSetFactors" + mset;
}
/**
* Comparison with any other object.
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object B) {
if (!(B instanceof MultiplicativeSetFactors)) {
return false;
}
return super.equals(B);
}
/**
* Add polynomial to mset.
* @param cc polynomial to be added to mset.
* @return new multiplicative set.
*/
@Override
public MultiplicativeSetFactors add(GenPolynomial cc) {
if (cc == null || cc.isZERO() || cc.isConstant()) {
return this;
}
if (ring.coFac.isField()) {
cc = cc.monic();
}
GenPolynomial c = removeFactors(cc);
if (c.isConstant()) {
logger.info("skipped unit or constant = " + c);
return this;
}
List> list = engine.factorsRadical(c);
logger.info("factorsRadical = " + list);
if (ring.coFac.isField()) {
list = PolyUtil. monic(list);
}
List> ms = new ArrayList>(mset);
for (GenPolynomial p : list) {
if (!p.isConstant() && !p.isZERO()) {
if (!mset.contains(p)) {
logger.info("added to irreducible mset = " + p);
ms.add(p);
}
}
}
return new MultiplicativeSetFactors(ring, ms, engine);
}
/**
* Replace polynomial list of mset.
* @param L polynomial list to replace mset.
* @return new multiplicative set.
*/
@Override
public MultiplicativeSetFactors replace(List> L) {
MultiplicativeSetFactors ms = new MultiplicativeSetFactors(ring);
if (L == null || L.size() == 0) {
return ms;
}
for (GenPolynomial p : L) {
ms = ms.add(p);
}
return ms;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy