mod number_theory {
use num::{PrimInt, Unsigned};
use std::{fmt::Display, ops::{AddAssign, MulAssign, DivAssign, SubAssign}};
pub trait UnsigInt : PrimInt + Unsigned + Display + AddAssign + MulAssign + DivAssign + SubAssign{
fn two() -> Self{
Self::one()+Self::one()
}
fn three() -> Self{
Self::two()+Self::one()
}
}
impl UnsigInt for u32{}
impl UnsigInt for usize{}
pub mod primality {
pub mod aks {
pub mod aks_2002;
pub mod aks_2003;
pub mod aks_bernstein;
mod aks_2005;
mod aks_theorem;
}
pub mod naive;
pub trait PrimalityTest {
type Int;
fn is_prime(n : Self::Int) -> bool;
}
}
pub mod primes_less_than {
pub mod sieve;
pub mod naive;
pub trait PrimesLessThan {
type Int;
fn get_primes(n : Self::Int) -> Vec<Self::Int>;
}
}
pub mod perfect_power {
pub mod bernstein {
pub mod bernstein_1998;
}
}
mod util;
}
pub use number_theory::primality::aks::aks_2002::Aks2002;
pub use number_theory::primality::aks::aks_2003::Aks2003;
pub use number_theory::primality::naive::Naive;
pub use number_theory::perfect_power::bernstein::bernstein_1998::Bernstein1988;
pub use number_theory::primes_less_than::naive::NaivePlt;
pub use number_theory::primes_less_than::PrimesLessThan;
pub use number_theory::primality::PrimalityTest;