pub struct Factorization<T: UInt> {
pub num: T,
pub is_prime: bool,
pub factors: Vec<T>,
}Fields§
§num: T§is_prime: bool§factors: Vec<T>Implementations§
Source§impl<T: 'static + UInt> Factorization<T>
impl<T: 'static + UInt> Factorization<T>
Sourcepub fn run(num: T) -> Self
pub fn run(num: T) -> Self
Factorize a positive natural number num to its prime factors.
After the call, factors field of the struct contains
all the prime factors, smallest prime being the first
element in the container. Field num has the original number
and field is_prime indicates whether the number is prime.
§Examples
Factorize natural number 1729
use prime_factorization::Factorization;
let factor_repr = Factorization::<u32>::run(1729);
assert_eq!(factor_repr.factors, vec![7, 13, 19]);Check whether 1801 is a prime number (no other factors than it itself)
use prime_factorization::Factorization;
let num = 1801u32;
let factor_repr = Factorization::run(num);
assert_eq!(factor_repr.is_prime, true);
assert_eq!(factor_repr.factors, vec![num]);Sourcepub fn prime_factor_repr(&self) -> Vec<(T, u32)>
pub fn prime_factor_repr(&self) -> Vec<(T, u32)>
Get the prime factor representation for the natural number num:
num = prm_1^k_1 * prm_2^k_2 * … * prm_n^k_n.
Representation is returned such that each element of the container
is a tuple with the prime factor prm_i and its count k_i as
its two elements, ordered such that the first tuple has the smallest prime.
This method assumes that the factors field has the correct prime
factors sorted from smallest to largest and as such the representation
can be directly produced from them.
Hence, always call the run associated function first.
§Examples
use prime_factorization::Factorization;
let num = 491_520u32;
// Run first the factorization, which is 2^15 * 3 * 5 for `num`
let factor_repr = Factorization::run(num);
assert_eq!(factor_repr.prime_factor_repr(), vec![(2, 15), (3, 1), (5, 1)]);Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for Factorization<T>where
T: Freeze,
impl<T> RefUnwindSafe for Factorization<T>where
T: RefUnwindSafe,
impl<T> Send for Factorization<T>
impl<T> Sync for Factorization<T>
impl<T> Unpin for Factorization<T>where
T: Unpin,
impl<T> UnwindSafe for Factorization<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more