一个MoonBit 综合大整数库,支持算术运算、幂运算、平方根等更多功能
moon update
moon add amor2025/biginteger{
"import": [
"amor2025/biginteger/lib"
]
}let a = BigInteger::from_int(123)
let b = BigInteger::from_string("123456789012345678901234567890")
let neg = BigInteger::from_int64(-9223372036854775808L)
// 往返转换
assert_true(b.to_string() == "123456789012345678901234567890")let a = BigInteger::from_string("123456789012345678901234567890")
let b = BigInteger::from_string("987654321098765432109876543210")
let sum = a + b
let product = a * b
let quotient = a / b
let remainder = a % blet n = BigInteger::from_int(255)
assert_true(n.to_hex() == "ff")
assert_true(n.to_binary() == "11111111")
assert_true(n.to_octal() == "377")
assert_true(n.to_string_radix(36) == "73")
// 解析回来
assert_true(BigInteger::from_hex("deadbeef").to_string() == "3735928559")
assert_true(BigInteger::from_string_radix("zz", 36) == BigInteger::from_int(1295))let n = BigInteger::from_int(0x12345678)
let bytes_be = n.to_bytes_be() // [0x12, 0x34, 0x56, 0x78]
let bytes_le = n.to_bytes_le() // [0x78, 0x56, 0x34, 0x12]
// 往返转换
assert_true(BigInteger::from_bytes_be(bytes_be) == n)let a = BigInteger::from_int(0b11001010)
let b = BigInteger::from_int(0b10110101)
assert_true(a.bit_and(b) == BigInteger::from_int(0b10000000))
assert_true(a.bit_or(b) == BigInteger::from_int(0b11111111))
assert_true(a.bit_xor(b) == BigInteger::from_int(0b01111111))
// 二进制补码取反:~n = -(n+1)
assert_true(BigInteger::from_int(5).bit_not() == BigInteger::from_int(-6))
// 位操作
let c = BigInteger::from_int(0)
assert_true(c.set_bit(3) == BigInteger::from_int(8))
assert_true(BigInteger::from_int(255).count_ones() == 8)// 素性测试 — 对 n < 3.3×10²⁴ 结果确定
assert_true(BigInteger::from_int(7919).is_prime(10))
assert_true(!BigInteger::from_int(7917).is_prime(10))
// 找邻近素数
assert_true(BigInteger::from_int(10).next_prime() == BigInteger::from_int(11))
assert_true(BigInteger::from_int(13).prev_prime() == BigInteger::from_int(11))
// 模逆元
let inv = BigInteger::from_int(3).mod_inverse(BigInteger::from_int(11))
// 3 * 4 = 12 ≡ 1 (mod 11)
assert_true(inv == BigInteger::from_int(4))
// 中国剩余定理
// x ≡ 2 (mod 3), x ≡ 3 (mod 5), x ≡ 2 (mod 7) → x = 23
let remainders = [
(BigInteger::from_int(2), BigInteger::from_int(3)),
(BigInteger::from_int(3), BigInteger::from_int(5)),
(BigInteger::from_int(2), BigInteger::from_int(7))
]
assert_true(BigInteger::crt(remainders) == BigInteger::from_int(23))// 使用 try/catch 处理解析错误
let result = try {
Some(BigInteger::from_string("not_a_number"))
} catch {
ParseError(_) => None
}
// mod_inverse 不存在时抛出 ModularArithmeticError
let _ = try {
BigInteger::from_int(4).mod_inverse(BigInteger::from_int(8))
false
} catch {
ModularArithmeticError(_) => true // gcd(4,8) != 1
}moon testInstall
Download zip一个MoonBit 综合大整数库,支持算术运算、幂运算、平方根等更多功能