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的幂次之差使得计算非常便宜。