Struct nekolib::math::sieve_n2_plus_1::SieveN2Plus1
source · 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 * 13
sourcepub 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 copy 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 RefUnwindSafe for SieveN2Plus1
impl Send for SieveN2Plus1
impl Sync for SieveN2Plus1
impl Unpin 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