Trait nekolib::math::mod_ord::ModOrd

source ·
pub trait ModOrd: Sized {
    // Required method
    fn mod_ord(self, other: Self) -> Option<Self>;
}
Expand description

位数。

法を nn として a,a2,,ama, a^2, \dots, a^m が互いに異なり、かつ am1a^m \equiv 1 である mm が存在すれば、それを返す。

0a<n0\le a\lt n とする。

Complexity

λ(n)\lambda(n) に対する素因数列挙にかかる時間に加え、各素因数に対して O(log(λ(n)))O(\log(\lambda(n))) 時間。試し割り法では O(n)O(\sqrt{n}) 時間。

Examples

use nekolib::math::ModOrd;

assert_eq!(7_u64.mod_ord(10), Some(4));
assert_eq!(1_u64.mod_ord(3), Some(1));
assert_eq!(22_u64.mod_ord(30), None);

Suggestions

dlog と同様、λ\lambda 関数と素因数列挙に関して引数で渡したいかも。

Required Methods§

source

fn mod_ord(self, other: Self) -> Option<Self>

Implementations on Foreign Types§

source§

impl ModOrd for u32

source§

fn mod_ord(self, n: Self) -> Option<Self>

source§

impl ModOrd for u128

source§

fn mod_ord(self, n: Self) -> Option<Self>

source§

impl ModOrd for usize

source§

fn mod_ord(self, n: Self) -> Option<Self>

source§

impl ModOrd for u16

source§

fn mod_ord(self, n: Self) -> Option<Self>

source§

impl ModOrd for u8

source§

fn mod_ord(self, n: Self) -> Option<Self>

source§

impl ModOrd for u64

source§

fn mod_ord(self, n: Self) -> Option<Self>

Implementors§