DKL9 GitList
Repositories
DKL9 home
rtensor
Code
Commits
Branches
Tags
Search
Tree:
1312198
Branches
Tags
master
rtensor
libraries
integer.rt
Import v2.3-dev from a demonic ritual
dkl9
commited
1312198
at 2023-184 18:25:57
integer.rt
Blame
History
Raw
# functions for integer calculations and number theory # use this by pasting file contents into the code-area # factorial of n fact(n) = if[n == 0, 1, n * fact(n - 1)] # is n prime? prime(n) = for[(g = 2), floor(n / g) * g < n, \ (g = if(<(n - g^2 - 1), n, g + 1)), g] == n # digits of n in base b (big-endian) digits(n, b) = digits(floor(n / b), b), (n - b * floor(n / b)) digits(0, b) = zero(0) # a modulo b mod(a,b) = a - b * floor(a / b) # greatest common divisor of m and n gcd(m, n) = gcd(n, mod(m, n)) gcd(m, 0) = m # factorial-base digits of n (little-endian) fd(n, k) = if[n < fact(k - 1), \ zero(0), \ (.. mod(n / fact(k - 1), k)) .. fd(n, k + 1)] fd(n) = fd(n, 1) # internal helper except(v, i) = if[all((len(v) == 2, i == 1)), \ .. v[2], \ if[len(v) == i, \ trim(v), \ (except(trim(v), i), v[len(v)])]] pad(v, n) = if[len(v) == n, v, pad((v, 0), n)] # permutation indexed by k, of order n permi(n, v, u) = (.. u[v[len(v)] + 1]) .. \ perm(n, trim(v), except(u, v[len(v)] + 1)) permi(n, zero(0), u) = zero(0) perm(n, k) = permi(n, pad(fd(k), n), 1 .. n)