34 Expression * numeratorDecomp = createMultiplicationOfIntegerPrimeDecomposition(r->numerator(), context, angleUnit);
40 if (!r->denominator().isOne()) {
41 Expression * denominatorDecomp = createMultiplicationOfIntegerPrimeDecomposition(r->denominator(), context, angleUnit);
47 result =
new Division(numeratorDecomp, denominatorDecomp,
false);
48 static_cast<Multiplication *
>(denominatorDecomp)->squashUnaryHierarchy();
51 result =
new Opposite(result,
false);
54 if (result == numeratorDecomp) {
55 return static_cast<Multiplication *
>(numeratorDecomp)->squashUnaryHierarchy();
57 static_cast<Multiplication *
>(numeratorDecomp)->squashUnaryHierarchy();
61 Expression * Factor::createMultiplicationOfIntegerPrimeDecomposition(Integer i, Context & context, AngleUnit angleUnit) {
73 if (coefficients[0].isMinusOne()) {
79 if (!coefficients[index].isOne()) {
81 factor =
new Power(factor, exponent,
false);
83 m->addOperand(factor);
Expression * replaceWith(Expression *newOperand, bool deleteAfterReplace=true)
Expression * editableOperand(int i)
static void PrimeFactorization(const Integer *i, Integer *outputFactors, Integer *outputCoefficients, int outputLength)
const Expression * m_operands[T]
friend class Multiplication
static constexpr int k_maxNumberOfPrimeFactors
Type type() const override
virtual Type type() const =0
Expression * clone() const override