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 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