PolynomialGcd

Trait PolynomialGcd 

Source
pub trait PolynomialGcd {
    // Required methods
    fn gcd(&self, other: &Self) -> Self;
    fn lcm(&self, other: &Self) -> Self;
    fn factor_gcd(&self) -> Self;
    fn cofactors(&self, other: &Self) -> (Expression, Expression, Expression);
    fn div_polynomial(
        &self,
        divisor: &Expression,
        var: &Symbol,
    ) -> (Expression, Expression);
    fn quo_polynomial(&self, divisor: &Expression, var: &Symbol) -> Expression;
    fn rem_polynomial(&self, divisor: &Expression, var: &Symbol) -> Expression;
}
Expand description

Trait for GCD operations on expressions

Required Methods§

Source

fn gcd(&self, other: &Self) -> Self

Source

fn lcm(&self, other: &Self) -> Self

Source

fn factor_gcd(&self) -> Self

Source

fn cofactors(&self, other: &Self) -> (Expression, Expression, Expression)

Source

fn div_polynomial( &self, divisor: &Expression, var: &Symbol, ) -> (Expression, Expression)

Divides this polynomial by another, returning (quotient, remainder).

Performs polynomial long division with respect to the specified variable. Returns a tuple (quotient, remainder) satisfying the division identity: dividend = divisor * quotient + remainder where degree(remainder) < degree(divisor).

§Arguments
  • divisor - The polynomial to divide by (must be non-zero)
  • var - The variable to treat as the polynomial variable
§Examples
use mathhook_core::{symbol, expr, Expression, algebra::gcd::PolynomialGcd};

let x = symbol!(x);
// Divide (x^2 + 3x + 2) by (x + 1)
// Expected: (x + 1)(x + 2) = x^2 + 3x + 2
let dividend = expr!((x^2) + (3*x) + 2);
let divisor = expr!(x + 1);
let (quotient, remainder) = dividend.div_polynomial(&divisor, &x);
assert_eq!(remainder, Expression::integer(0));
§Returns

Returns (quotient, remainder) tuple where both are expressions

Source

fn quo_polynomial(&self, divisor: &Expression, var: &Symbol) -> Expression

Returns the quotient of polynomial division.

Computes only the quotient part of polynomial division, discarding the remainder. Equivalent to div_polynomial(divisor, var).0.

§Arguments
  • divisor - The polynomial to divide by
  • var - The variable to treat as the polynomial variable
§Examples
use mathhook_core::{symbol, expr, algebra::gcd::PolynomialGcd};

let x = symbol!(x);
let dividend = expr!((x^2) - 1);
let divisor = expr!(x - 1);
let quotient = dividend.quo_polynomial(&divisor, &x);
// quotient = x + 1
§Returns

Returns the quotient expression

Source

fn rem_polynomial(&self, divisor: &Expression, var: &Symbol) -> Expression

Returns the remainder of polynomial division.

Computes only the remainder part of polynomial division, discarding the quotient. Equivalent to div_polynomial(divisor, var).1.

§Arguments
  • divisor - The polynomial to divide by
  • var - The variable to treat as the polynomial variable
§Examples
use mathhook_core::{symbol, expr, Expression, algebra::gcd::PolynomialGcd};

let x = symbol!(x);
let dividend = expr!((x^2) + 1);
let divisor = expr!(x - 1);
let remainder = dividend.rem_polynomial(&divisor, &x);
assert_eq!(remainder, Expression::integer(2));
§Returns

Returns the remainder expression

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§