pub struct Factorial { /* private fields */ }Expand description
階乗とその乗法逆元、そして二項係数を扱います。
Implementations§
Source§impl Factorial
impl Factorial
Sourcepub fn new(size: usize, modulo: u64) -> Self
pub fn new(size: usize, modulo: u64) -> Self
1 以上 size 未満の n について、n の階乗 (mod modulo) と、その乗法逆元を O(size) 時間で計算します。参考
逆元を正しく計算するためには
moduloが素数modulo >= size
である必要があります。
§Examples
use factorials::Factorial;
let modulo = 1_000_000_000 + 7;
let f = Factorial::new(100, modulo);
for i in 1..100 {
assert_eq!(f.factorial(i) * f.inversion(i) % modulo, 1);
}§Panics
modulo が size より小さい場合パニックです。
ⓘ
use factorials::Factorial;
let size = 100;
let modulo = 97;
Factorial::new(size, modulo);Sourcepub fn new_checking_modulo_prime(size: usize, modulo: u64) -> Self
pub fn new_checking_modulo_prime(size: usize, modulo: u64) -> Self
pub fn factorial(&self, n: usize) -> u64
pub fn inversion(&self, n: usize) -> u64
Sourcepub fn binomial(&self, n: usize, k: usize) -> u64
pub fn binomial(&self, n: usize, k: usize) -> u64
二項係数を返します。
§Examples
use factorials::Factorial;
let f = Factorial::new_checking_modulo_prime(5, 107);
assert_eq!(f.binomial(4, 0), 1);
assert_eq!(f.binomial(4, 1), 4);
assert_eq!(f.binomial(4, 2), 6);
assert_eq!(f.binomial(4, 3), 4);
assert_eq!(f.binomial(4, 4), 1);§Panics
以下の少なくともひとつが成り立つ場合パニックです。
nが構築時のsize以上kが構築時のsize以上nがkより小さい
ⓘ
use factorials::Factorial;
let f = Factorial::new_checking_modulo_prime(5, 107);
f.binomial(3, 4); // n < kAuto Trait Implementations§
impl Freeze for Factorial
impl RefUnwindSafe for Factorial
impl Send for Factorial
impl Sync for Factorial
impl Unpin for Factorial
impl UnsafeUnpin for Factorial
impl UnwindSafe for Factorial
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