use crate::natural::Natural;
use malachite_base::num::conversion::traits::SaturatingFrom;
use malachite_base::num::factorization::primes::{PrimesIterator, PrimesLessThanIterator};
use malachite_base::num::factorization::traits::Primes;
#[derive(Clone, Debug)]
pub struct NaturalPrimesLessThanIterator(PrimesLessThanIterator<u64>);
impl Iterator for NaturalPrimesLessThanIterator {
type Item = Natural;
#[inline]
fn next(&mut self) -> Option<Natural> {
self.0.next().map(Natural::from)
}
}
#[derive(Clone, Debug)]
pub struct NaturalPrimesIterator(PrimesIterator<u64>);
impl Iterator for NaturalPrimesIterator {
type Item = Natural;
#[inline]
fn next(&mut self) -> Option<Natural> {
self.0.next().map(Natural::from)
}
}
impl Primes for Natural {
type I = NaturalPrimesIterator;
type LI = NaturalPrimesLessThanIterator;
#[inline]
fn primes_less_than(n: &Self) -> NaturalPrimesLessThanIterator {
NaturalPrimesLessThanIterator(u64::primes_less_than(&u64::saturating_from(n)))
}
#[inline]
fn primes_less_than_or_equal_to(n: &Self) -> NaturalPrimesLessThanIterator {
NaturalPrimesLessThanIterator(u64::primes_less_than_or_equal_to(&u64::saturating_from(n)))
}
#[inline]
fn primes() -> NaturalPrimesIterator {
NaturalPrimesIterator(u64::primes())
}
}