pub struct SieveN2Plus1 { /* private fields */ }Expand description
$n^2+1$ 型素数の篩。
§Idea
$n^2+1$ が素因数 $p < n$ を持つとき、以下が成り立つ。 $$ n^2+1 \equiv 0 \pmod{p}. $$ このとき、各 $k$ に対して以下が成り立つ。
- $(n+kp)^2+1 \equiv 0 \pmod{p}$,
- $(kp-n)^2+1 \equiv 0 \pmod{p}$.
§References
§See also
- https://inamori.hateblo.jp/entry/20110930/p1
- $n^2+n+1$ 型素数についての話。
- https://twitter.com/min_25_/status/1418781997892136960
- https://twitter.com/min_25_/status/1418794801625853952
- $an^2+bn+c$ 型素数についての話。
Implementations§
Source§impl SieveN2Plus1
impl SieveN2Plus1
Sourcepub fn primes(&self) -> impl Iterator<Item = usize> + '_
pub fn primes(&self) -> impl Iterator<Item = usize> + '_
$n^2+1$ の形の素数を返す。
§Examples
use nekolib::math::SieveN2Plus1;
let ss = SieveN2Plus1::new(10);
let primes: Vec<_> = ss.primes().collect();
assert_eq!(primes, [2, 5, 17, 37, 101]);Sourcepub fn is_prime(&self, n: usize) -> bool
pub fn is_prime(&self, n: usize) -> bool
$n^2+1$ が素数のとき真を返す。
§Examples
use nekolib::math::SieveN2Plus1;
let ss = SieveN2Plus1::new(10);
assert!(ss.is_prime(2)); // 5 is prime
assert!(!ss.is_prime(5)); // 26 = 2 * 13Sourcepub fn factors(&self, n: usize) -> impl Iterator<Item = (usize, u32)> + '_
pub fn factors(&self, n: usize) -> impl Iterator<Item = (usize, u32)> + '_
$n^2+1$ を素因数分解する。
底の昇順とは限らないので注意。最小の反例は n = 21。
§Examples
use nekolib::math::SieveN2Plus1;
let ss = SieveN2Plus1::new(10);
assert_eq!(ss.factors(0).next(), None);
assert_eq!(ss.factors(4).collect::<Vec<_>>(), [(17, 1)]);
assert_eq!(ss.factors(7).collect::<Vec<_>>(), [(2, 1), (5, 2)]);Sourcepub fn factors_dup(&self, n: usize) -> impl Iterator<Item = usize> + '_
pub fn factors_dup(&self, n: usize) -> impl Iterator<Item = usize> + '_
$n^2+1$ を素因数を列挙する。重複あり。
底の昇順とは限らないので注意。最小の反例は n = 21。
§Examples
use nekolib::math::SieveN2Plus1;
let ss = SieveN2Plus1::new(10);
assert_eq!(ss.factors_dup(0).next(), None);
assert_eq!(ss.factors_dup(4).collect::<Vec<_>>(), [17]);
assert_eq!(ss.factors_dup(7).collect::<Vec<_>>(), [2, 5, 5]);Trait Implementations§
Source§impl Clone for SieveN2Plus1
impl Clone for SieveN2Plus1
Source§fn clone(&self) -> SieveN2Plus1
fn clone(&self) -> SieveN2Plus1
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for SieveN2Plus1
impl RefUnwindSafe for SieveN2Plus1
impl Send for SieveN2Plus1
impl Sync for SieveN2Plus1
impl Unpin for SieveN2Plus1
impl UnsafeUnpin for SieveN2Plus1
impl UnwindSafe for SieveN2Plus1
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
Mutably borrows from an owned value. Read more