pub struct PolynomialOverP<T> { /* private fields */ }
Expand description
PolynomialOverP ring over finite prime field $F_p[x]
$
use num_traits::Zero;
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::new(vec![3, 1, 4, 1, 5], 17);
let q = PolynomialOverP::<i32>::new(vec![2, 7, 1], 17);
let mut r = p.clone();
let d = r.division(&q);
assert!((d * q + r - p).is_zero());
Implementations
sourceimpl<T: Sized> PolynomialOverP<T>
impl<T: Sized> PolynomialOverP<T>
sourcepub fn deg(&self) -> Option<usize>
pub fn deg(&self) -> Option<usize>
degree of polynomial
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::new(vec![3, 2, 1], 5); // 3+2x+x^2
assert_eq!(p.deg(), Some(2));
let q = PolynomialOverP::<i32>::new(vec![0], 5); // 0
assert_eq!(q.deg(), None);
sourcepub fn lc(&self) -> Option<&T>
pub fn lc(&self) -> Option<&T>
leading coefficent
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::new(vec![3, 2, 1], 5); // 3+2x+x^2
assert_eq!(p.lc(), Some(&1));
let q = PolynomialOverP::<i32>::new(vec![0], 5); // 0
assert_eq!(q.lc(), None);
sourcepub fn coefs(self) -> Vec<T>
pub fn coefs(self) -> Vec<T>
get coefficents
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::new(vec![3, 2, 1], 5); // 3+2x+x^2
assert_eq!(p.coefs(), vec![3, 2, 1]);
let q = PolynomialOverP::<i32>::new(vec![0], 5); // 0
assert_eq!(q.coefs(), Vec::<i32>::new());
sourcepub fn prime_ref(&self) -> &T
pub fn prime_ref(&self) -> &T
get prime
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::new(vec![3, 2, 1], 97); // 3+2x+x^2
assert_eq!(p.prime_ref(), &97);
let q = PolynomialOverP::<i32>::new(vec![0], 5); // 0
assert_eq!(q.prime_ref(), &5);
sourcepub fn new(coef: Vec<T>, prime: T) -> Self where
T: Zero,
for<'x> &'x T: Rem<Output = T>,
pub fn new(coef: Vec<T>, prime: T) -> Self where
T: Zero,
for<'x> &'x T: Rem<Output = T>,
construct polynomial
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::new(vec![3, 2, 1], 5);
assert_eq!(p.to_string(), "x^2+2*x+3");
sourcepub fn from_monomial(coefficent: T, degree: usize, prime: T) -> Self where
T: Zero,
pub fn from_monomial(coefficent: T, degree: usize, prime: T) -> Self where
T: Zero,
construct polynomial from monomial $cx^d
$ ($c
$=coefficent, $d
$=degree)
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::from_monomial(3, 2, 5);
let q = PolynomialOverP::<i32>::new(vec![0, 0, 3], 5);
assert_eq!(p, q);
sourcepub fn one(prime: T) -> Self where
T: One,
pub fn one(prime: T) -> Self where
T: One,
Make one polynomial
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::one(5);
assert_eq!(p, PolynomialOverP::<i32>::new(vec![1], 5));
sourcepub fn eval<'a>(&self, x: &'a T) -> T where
T: Sized + Clone + Zero,
for<'x> &'x T: Add<Output = T> + Mul<Output = T> + Rem<Output = T>,
pub fn eval<'a>(&self, x: &'a T) -> T where
T: Sized + Clone + Zero,
for<'x> &'x T: Add<Output = T> + Mul<Output = T> + Rem<Output = T>,
evaluate polynomial by Horner’s method
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::new(vec![3, 2, 1], 7); // 3+2x+x^2
assert_eq!(p.eval(&1), 6);
assert_eq!(p.eval(&2), 4);
assert_eq!(p.eval(&3), 4);
sourcepub fn derivative(self) -> Self where
T: Clone + Zero + for<'x> AddAssign<&'x T> + TryFrom<usize>,
for<'x> &'x T: Mul<Output = T> + Rem<Output = T>,
<T as TryFrom<usize>>::Error: Debug,
pub fn derivative(self) -> Self where
T: Clone + Zero + for<'x> AddAssign<&'x T> + TryFrom<usize>,
for<'x> &'x T: Mul<Output = T> + Rem<Output = T>,
<T as TryFrom<usize>>::Error: Debug,
derivative
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<usize>::new(vec![1, 2, 3, 2, 1], 7); // 1+2x+3x^2+2x^3+x^4
assert_eq!(p.derivative(), PolynomialOverP::<usize>::new(vec![2, 6, 6, 4], 7));
let q = PolynomialOverP::<usize>::new(vec![1, 2, 3, 4, 3, 2, 1], 5); // 1+2x+3x^2+4x^3+3x^4+2x^5+x^6
assert_eq!(q.derivative(), PolynomialOverP::<usize>::new(vec![2, 1, 2, 2, 0, 1], 5));
sourcepub fn monic(&mut self) where
T: Clone + Eq + Zero + One + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
pub fn monic(&mut self) where
T: Clone + Eq + Zero + One + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
make polynomial monic
use polynomial_over_finite_prime_field::PolynomialOverP;
let mut p = PolynomialOverP::<i32>::new(vec![1, 2, 3], 5);
p.monic();
let q = PolynomialOverP::<i32>::new(vec![2, 4, 1], 5);
assert_eq!(p, q);
sourcepub fn division(&mut self, other: &Self) -> Self where
T: Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
pub fn division(&mut self, other: &Self) -> Self where
T: Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
polynomial division
use num_traits::Zero;
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<i32>::new(vec![3, 1, 4, 1, 5], 17);
let q = PolynomialOverP::<i32>::new(vec![2, 7, 1], 17);
let mut r = p.clone();
let d = r.division(&q);
assert!((d * q + r - p).is_zero());
sourcepub fn pth_root(self) -> Option<Self> where
T: Clone + Eq + Zero + TryFrom<usize> + TryInto<usize>,
for<'x> &'x T: Rem<Output = T>,
usize: TryFrom<T>,
<T as TryFrom<usize>>::Error: Debug,
pub fn pth_root(self) -> Option<Self> where
T: Clone + Eq + Zero + TryFrom<usize> + TryInto<usize>,
for<'x> &'x T: Rem<Output = T>,
usize: TryFrom<T>,
<T as TryFrom<usize>>::Error: Debug,
calclate $\displaystyle \sqrt[p]{f}
$
Return Some
if input polynomial is $\displaystyle \sum_{i=0}^{n} c_{ip}x^{ip}
$.
Otherwize returns None
.
use num_traits::Zero;
use polynomial_over_finite_prime_field::PolynomialOverP;
let p = PolynomialOverP::<usize>::new(vec![3, 0, 1, 0, 4], 2);
let q = p.pth_root().unwrap();
assert_eq!(q, PolynomialOverP::<usize>::new(vec![3, 1, 4], 2));
let p = PolynomialOverP::<usize>::new(vec![2, 0, 0, 7, 0, 0, 1], 3);
let q = p.pth_root().unwrap();
assert_eq!(q, PolynomialOverP::<usize>::new(vec![2, 7, 1], 3));
let p = PolynomialOverP::<usize>::new(vec![1, 0, 0, 0, 1], 2);
let q = p.pth_root().unwrap();
assert_eq!(q, PolynomialOverP::<usize>::new(vec![1, 0, 1], 2));
let p = PolynomialOverP::<usize>::new(vec![3, 0, 1, 0, 2, 9], 2);
let q = p.pth_root();
assert_eq!(q, None);
sourcepub fn to_positive(&mut self) where
T: Zero + Ord + for<'x> AddAssign<&'x T>,
pub fn to_positive(&mut self) where
T: Zero + Ord + for<'x> AddAssign<&'x T>,
to positive
use polynomial_over_finite_prime_field::PolynomialOverP;
let mut p = PolynomialOverP::<i32>::new(vec![-3, 1, -4, 1, -5], 7);
p.to_positive();
let q = PolynomialOverP::<i32>::new(vec![4, 1, 3, 1, 2], 7);
assert_eq!(p, q);
Trait Implementations
sourceimpl<'a, T> Add<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<'a, T> Add<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Add<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<'a, T> Add<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Add<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<'a, T> Add<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
type Output = PolynomialOverP<T>
type Output = PolynomialOverP<T>
The resulting type after applying the +
operator.
sourcefn add(self, other: PolynomialOverP<T>) -> Self::Output
fn add(self, other: PolynomialOverP<T>) -> Self::Output
Performs the +
operation. Read more
sourceimpl<T> Add<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<T> Add<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
type Output = PolynomialOverP<T>
type Output = PolynomialOverP<T>
The resulting type after applying the +
operator.
sourcefn add(self, other: PolynomialOverP<T>) -> Self::Output
fn add(self, other: PolynomialOverP<T>) -> Self::Output
Performs the +
operation. Read more
sourceimpl<'a, T> AddAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<'a, T> AddAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
sourcefn add_assign(&mut self, other: &Self)
fn add_assign(&mut self, other: &Self)
Performs the +=
operation. Read more
sourceimpl<T> AddAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<T> AddAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
sourcefn add_assign(&mut self, other: Self)
fn add_assign(&mut self, other: Self)
Performs the +=
operation. Read more
sourceimpl<T: Clone> Clone for PolynomialOverP<T>
impl<T: Clone> Clone for PolynomialOverP<T>
sourcefn clone(&self) -> PolynomialOverP<T>
fn clone(&self) -> PolynomialOverP<T>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl<T: Debug> Debug for PolynomialOverP<T>
impl<T: Debug> Debug for PolynomialOverP<T>
sourceimpl<'a, T> Div<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<'a, T> Div<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Div<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<'a, T> Div<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Div<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<'a, T> Div<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
type Output = PolynomialOverP<T>
type Output = PolynomialOverP<T>
The resulting type after applying the /
operator.
sourcefn div(self, other: PolynomialOverP<T>) -> Self::Output
fn div(self, other: PolynomialOverP<T>) -> Self::Output
Performs the /
operation. Read more
sourceimpl<T> Div<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<T> Div<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> DivAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<'a, T> DivAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourcefn div_assign(&mut self, other: &Self)
fn div_assign(&mut self, other: &Self)
Performs the /=
operation. Read more
sourceimpl<T> DivAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<T> DivAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourcefn div_assign(&mut self, other: Self)
fn div_assign(&mut self, other: Self)
Performs the /=
operation. Read more
sourceimpl<'a, T> Mul<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
impl<'a, T> Mul<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Mul<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + Sub<Output = T> + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
impl<'a, T> Mul<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + Sub<Output = T> + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Mul<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
impl<'a, T> Mul<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
type Output = PolynomialOverP<T>
type Output = PolynomialOverP<T>
The resulting type after applying the *
operator.
sourcefn mul(self, other: PolynomialOverP<T>) -> Self::Output
fn mul(self, other: PolynomialOverP<T>) -> Self::Output
Performs the *
operation. Read more
sourceimpl<T> Mul<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
impl<T> Mul<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> MulAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
impl<'a, T> MulAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
sourcefn mul_assign(&mut self, other: &Self)
fn mul_assign(&mut self, other: &Self)
Performs the *=
operation. Read more
sourceimpl<T> MulAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
impl<T> MulAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Mul<Output = T> + Rem<Output = T>,
sourcefn mul_assign(&mut self, other: Self)
fn mul_assign(&mut self, other: Self)
Performs the *=
operation. Read more
sourceimpl<'a, T> Neg for &'a PolynomialOverP<T> where
T: Sized + Clone,
for<'x> &'x T: Neg<Output = T>,
impl<'a, T> Neg for &'a PolynomialOverP<T> where
T: Sized + Clone,
for<'x> &'x T: Neg<Output = T>,
sourceimpl<T: Sized> PartialEq<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Clone + Eq + Zero,
for<'x> &'x T: Sub<Output = T> + Rem<Output = T>,
impl<T: Sized> PartialEq<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Clone + Eq + Zero,
for<'x> &'x T: Sub<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Rem<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<'a, T> Rem<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Rem<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<'a, T> Rem<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Rem<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<'a, T> Rem<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
type Output = PolynomialOverP<T>
type Output = PolynomialOverP<T>
The resulting type after applying the %
operator.
sourcefn rem(self, other: PolynomialOverP<T>) -> Self::Output
fn rem(self, other: PolynomialOverP<T>) -> Self::Output
Performs the %
operation. Read more
sourceimpl<T> Rem<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<T> Rem<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> RemAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<'a, T> RemAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourcefn rem_assign(&mut self, other: &Self)
fn rem_assign(&mut self, other: &Self)
Performs the %=
operation. Read more
sourceimpl<'a, T> RemAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<'a, T> RemAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Eq + Zero + One + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T> + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
sourcefn rem_assign(&mut self, other: Self)
fn rem_assign(&mut self, other: Self)
Performs the %=
operation. Read more
sourceimpl<T> RingNormalize for PolynomialOverP<T> where
T: Sized + Clone + Eq + Zero + One + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
impl<T> RingNormalize for PolynomialOverP<T> where
T: Sized + Clone + Eq + Zero + One + RingNormalize,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Rem<Output = T>,
fn leading_unit(&self) -> Self
fn normalize_mut(&mut self)
fn into_normalize(self) -> Self
fn normalize(&self) -> Self where
Self: Clone,
fn is_similar(&self, other: &Self) -> bool where
Self: Clone + Eq,
sourceimpl<'a, T> Sub<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<'a, T> Sub<&'a PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Sub<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<'a, T> Sub<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
sourceimpl<'a, T> Sub<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<'a, T> Sub<PolynomialOverP<T>> for &'a PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
type Output = PolynomialOverP<T>
type Output = PolynomialOverP<T>
The resulting type after applying the -
operator.
sourcefn sub(self, other: PolynomialOverP<T>) -> Self::Output
fn sub(self, other: PolynomialOverP<T>) -> Self::Output
Performs the -
operation. Read more
sourceimpl<T> Sub<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<T> Sub<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
type Output = PolynomialOverP<T>
type Output = PolynomialOverP<T>
The resulting type after applying the -
operator.
sourcefn sub(self, other: PolynomialOverP<T>) -> Self::Output
fn sub(self, other: PolynomialOverP<T>) -> Self::Output
Performs the -
operation. Read more
sourceimpl<'a, T> SubAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<'a, T> SubAssign<&'a PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
sourcefn sub_assign(&mut self, other: &Self)
fn sub_assign(&mut self, other: &Self)
Performs the -=
operation. Read more
sourceimpl<T> SubAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<T> SubAssign<PolynomialOverP<T>> for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
sourcefn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
Performs the -=
operation. Read more
sourceimpl<T> Zero for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<T> Zero for PolynomialOverP<T> where
T: Sized + Clone + Ord + Zero + for<'x> AddAssign<&'x T> + for<'x> SubAssign<&'x T>,
for<'x> &'x T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> + Rem<Output = T>,
impl<T: Sized> Eq for PolynomialOverP<T> where
T: Clone + Eq + Zero,
for<'x> &'x T: Sub<Output = T> + Rem<Output = T>,
Auto Trait Implementations
impl<T> RefUnwindSafe for PolynomialOverP<T> where
T: RefUnwindSafe,
impl<T> Send for PolynomialOverP<T> where
T: Send,
impl<T> Sync for PolynomialOverP<T> where
T: Sync,
impl<T> Unpin for PolynomialOverP<T> where
T: Unpin,
impl<T> UnwindSafe for PolynomialOverP<T> where
T: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> CheckedAs for T
impl<T> CheckedAs for T
sourcefn checked_as<Dst>(self) -> Option<Dst> where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst> where
T: CheckedCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> CheckedCastFrom<Src> for Dst where
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dst where
Src: CheckedCast<Dst>,
sourcefn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Casts the value.
sourceimpl<T> OverflowingAs for T
impl<T> OverflowingAs for T
sourcefn overflowing_as<Dst>(self) -> (Dst, bool) where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool) where
T: OverflowingCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> OverflowingCastFrom<Src> for Dst where
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dst where
Src: OverflowingCast<Dst>,
sourcefn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
OverflowingCasts the value.
sourceimpl<T> SaturatingAs for T
impl<T> SaturatingAs for T
sourcefn saturating_as<Dst>(self) -> Dst where
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dst where
T: SaturatingCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> SaturatingCastFrom<Src> for Dst where
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dst where
Src: SaturatingCast<Dst>,
sourcefn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Casts the value.
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
sourcefn unwrapped_as<Dst>(self) -> Dst where
T: UnwrappedCast<Dst>,
fn unwrapped_as<Dst>(self) -> Dst where
T: UnwrappedCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> UnwrappedCastFrom<Src> for Dst where
Src: UnwrappedCast<Dst>,
impl<Src, Dst> UnwrappedCastFrom<Src> for Dst where
Src: UnwrappedCast<Dst>,
sourcefn unwrapped_cast_from(src: Src) -> Dst
fn unwrapped_cast_from(src: Src) -> Dst
UnwrappedCasts the value.
sourceimpl<T> WrappingAs for T
impl<T> WrappingAs for T
sourcefn wrapping_as<Dst>(self) -> Dst where
T: WrappingCast<Dst>,
fn wrapping_as<Dst>(self) -> Dst where
T: WrappingCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> WrappingCastFrom<Src> for Dst where
Src: WrappingCast<Dst>,
impl<Src, Dst> WrappingCastFrom<Src> for Dst where
Src: WrappingCast<Dst>,
sourcefn wrapping_cast_from(src: Src) -> Dst
fn wrapping_cast_from(src: Src) -> Dst
WrappingCasts the value.