离散数学是一组来自离散数学的算法实现。
==%
当且仅当m | (b - a)时,关系a ≡ b(mod m)成立。
-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()
使用扩展欧几里得算法返回两个整数的最大公约数,并以整数组合的形式返回。
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)
离散数学可以通过CocoaPods获取。安装方法如下:
只需将以下行添加到Podfile中
pod 'DiscreteMathematics', '~> 1.2'
离散数学可以通过Swift包管理器获取。安装方法如下:
在Package.swift
中添加以下内容。
import PackageDescription
let package = Package(
name: "MyProject",
dependencies: [
.package(url: "https://github.com/cszatma/DiscreteMathematics.git", from: "1.2.0")
]
)
提交一个问题或发送一个拉取请求。