#有限域 #多项式 # #操作 #素数 #欧几里得 #

nightly finitelib

A Rust库,用于有限群、域、它们的扩展、多精度运算、欧几里得环、多项式及其相关内容的高级数学

7个版本

0.1.6 2024年7月15日
0.1.5 2024年7月15日
0.1.1 2024年3月2日

#315 in 数学

Download history 475/week @ 2024-07-12 40/week @ 2024-07-19 9/week @ 2024-07-26 2/week @ 2024-08-02

每月 68次下载

MIT 许可证

170KB
3.5K SLoC

finitelib

finitelib 是一个针对有限群、域、它们的扩展、多精度运算及其相关内容的库。

目前库支持

  • 有限群
  • 有限域(素数 - GF(p),分割 - GF(p^m),二进制 - GF(2^m),Montgomery表示)
  • 欧几里得环(包括模运算)
  • 多项式
  • 无符号整数上的多精度运算
    • 转换
    • 格式化
    • 基本操作:加法、减法、乘法、除法、位操作
    • 素数:费马测试、Miller-Rabin测试、勒让德符号、Tonelli-Shanks算法

使用方法

安装命令

cargo add finitelib

或者将其添加到您的 Cargo.toml

[dependencies]
finitelib = "0.1.6"

基本示例

use finitelib::prelude::*;
use finitelib::gf::prime::Prime as GF;

// Define 256-bit unsigned integer type
type U256 = bigi_of_bits!(256);

// Define an Euclidean ring over U256, that contains the correct basic
// math operations like addition, multiplication, Euclidean extended
// algorithm and so on.
let R256 = bigi_ring_for_bigi!(U256);

// Define a 256-bit prime number
let p = U256::from_decimal("67096435317933606252190858377894931905843553631817376158639971807689379094463");

// Define a finite field `GF(p)` with the prime characteristic `p`
let gf = GF::new(R256, p);

// Define two arbitrary numbers
let a = U256::from(3);
let b = U256::from(2);

// Perform division a / b inside the field
let c = gf.div(&a, &b).unwrap();

// Print the result as a decimal string
println!("{:?}", c.to_decimal());

// Perform multiplication
let d = gf.mul(&c, &b);

// Since multiplication is opposite to division `d` must be equal to `a`
assert_eq!(d, a);

依赖项

~315KB