2个版本
0.1.1 | 2023年10月27日 |
---|---|
0.1.0 | 2023年8月31日 |
#1661 in 数学
67KB
1.5K SLoC
m61-modulus
用于执行61次梅森数模运算的函数。旨在测试大数实现。
文档
https://www.docs.rs/m61-modulus/
许可
此项目受以下任一许可的许可:
任选其一。
lib.rs
:
用于执行61次梅森数模运算的函数。旨在测试大数实现。
用法
此crate附带一个trait M61Reduction
和一个类型 [M61
]. M61
是一个整数,其中所有算术都是在61次梅森数上执行的,2^61 - 1
.
use m61_modulus::*;
let x = M61::from(1u64 << 61);
let y = M61::from(1u64);
assert_eq!(x, y);
M61Reduction
为无符号整数切片实现,提供了两个函数,用于对2^61 - 1
取模,就像它们是大数实现中的数字一样。
use m61_modulus::*;
let x = [1u16, 734u16, 24u16].reduce_m61();
let y = M61::from(1) + M61::from(734 << 16) + M61::from(24u64 << 32);
assert_eq!(x, y);
这些函数是reduce_m61
,它是单线程的,以及reduce_m61_parallelized
,它可能会创建额外的线程。
此crate附带两个功能
nightly
,它启用了对AVX512等夜间仅支持的功能的访问。默认禁用。std
,它提供了对reduce_m61_parallelized
函数的访问,该函数需要Rust标准库。如果禁用,此crate也将能在no-std
目标上运行。默认启用。
背景
此crate的设计是为了以低廉的成本验证大数实现(如num-bigint
)的结果。通过重复使用模运算执行操作,可以测试结果,而无需使用涉及任意精度算术的更简单但更慢的实现。
对61次梅森数进行算术模运算非常适合此目的
- 这是一个素数,这意味着在随机输入的情况下,结果分布得很好。
- 它与下一个2的幂次之差使得计算非常便宜。