离散数学 是一组来自离散数学的算法实现。
等价关系 a ≡ b(mod m) ↔ m | (b - a)。
-8 ==% (7, 5) // true
2 ==% (8, 5) // false
返回 a|b 是否成立 ↔ ∃ q ∈ N, b = q · a。
3 |% 9 // true
2 |% 7 // false
对两个整数执行除法,并返回商和余数。
a = q · b + r
longDivision(a: 8, b: 3) // (q: 2, r: 2)
gcd()
使用欧几里得算法返回最大公约数。
gcd(5005, 4410) // 35
gcd(175, 155) // 5
egcd()
使用扩展欧几里得算法返回两个整数的 GCD 作为整数组合。
a · x + b · y = d
egcd(5005, 4410) // (d: 35, x: -37, y: 42)
egcd(175, 155) // (d: 5, x: 8, y: -9)
如果 gcd(a, b) = 1,则称两个元素 a 和 b 互质。
coprime(17, -60) // true
lde()
返回给定线性丢番图方程的解,如果无解则返回 nil
。
lde(a: 175, b: 155, c: 50) // (x: 80, y: -90)
lde(a: 234, b: 182, c: 10) // nil
ldeSolutions()
返回一个函数,该函数将计算 LDE 的所有可能的解。
let solutions = ldeSolutions(a: 175, b: 155, c: 50)
solutions!(3) // (173, -195)
推荐使用 Swift Package Manager 来安装 DiscreteMathematics
。
要安装它,请将以下内容添加到您的 Package.swift
的 dependencies
数组中
.package(url: "https://github.com/cszatma/DiscreteMathematics.git", from: "2.0.0")
DiscreteMathematics 也可以通过 CocoaPods 获得。
要安装它,请将以下行添加到您的 Podfile 中
pod 'DiscreteMathematics', '~> 2.0'
DiscreteMathematics 在 MIT 许可证 下可用。
打开一个 issue 或提交一个 pull request。