3a: Modular and Signed Ints
+egcd
+egcdExtended Euclidean algorithm.
Produces .d, the greatest common divisor of .a and .b. Also produces .u and .v such that .
Accepts
.a is an $atom.
.b is an $atom.
Produces
.d, the greatest common divisor, is an $atom.
.u, the coefficient of .a, is a signed integer.
.v, the coefficient of .b, is a signed integer.
Source
++ egcd
|= [a=@ b=@]
=+ si
=+ [c=(sun a) d=(sun b)]
=+ [u=[c=(sun 1) d=--0] v=[c=--0 d=(sun 1)]]
|- ^- [d=@ u=@s v=@s]
?: =(--0 c)
[(abs d) d.u d.v]
=+ q=(fra d c)
%= $
c (dif d (pro q c))
d c
u [(dif d.u (pro q c.u)) c.u]
v [(dif d.v (pro q c.v)) c.v]
==Examples
+fo
+foModulo prime.
Container door for modular arithmetic functions.
Accepts
.a is an $atom
Source
+dif:fo
+dif:foSubtraction.
Produces the difference between $atoms .b and .c, with .a as the modular base.
Accepts
.a is an $atom, and is the sample of +fo.
.b is an $atom.
.c is an $atom.
Produces
An $atom.
Source
Examples
+exp:fo
+exp:foExponent.
Produces the power of .c raised to the .b, with .a as the modular base.
Accepts
.a is an $atom, and is the sample of +fo.
.b is an $atom.
.c is an $atom.
Produces
An $atom.
Source
Examples
+fra:fo
+fra:foDivide.
Produces the quotient of .b divided by .c, with .a as the modular base.
Accepts
.a is an $atom, and is the sample of +fo.
.b is an $atom.
.c is an $atom.
Produces
An $atom.
Source
Examples
+inv:fo
+inv:foInverse.
Produces an $atom by taking the signed modulus of .a with the coefficient .u; .u is produced by taking the +egcd of .a and .b.
Accepts
.a is an $atom, and is the sample of +fo.
.b is an $atom.
Produces
An $atom.
Source
Examples
+pro:fo
+pro:foMultiplication.
Produces the multiplication of .b and .c modulo .a.
Accepts
.a is an $atom, and is the sample of +fo.
.b is an $atom.
.c is an $atom.
Produces
An $atom.
Source
Examples
+sit:fo
+sit:foModulus.
Produces the remainder of .b modulo .a.
Accepts
.a is an $atom, and is the sample of +fo.
.b is an $atom.
Produces
An $atom.
Source
Examples
+sum:fo
+sum:foModular sum.
Produces the remainder of (b + c) mod a.
Accepts
.a is an $atom, and is the sample of +fo.
.b is an $atom.
.c is an $atom.
Produces
An $atom.
Source
Examples
+si
+siSigned integer.
Container core for signed integer functions.
Source
Discussion
The signed-integer type is represented by the @s aura. Positive integers are prepended with a --, and negative integers are prepended with a -. For example, --1 represents positive one, and -1 represents negative one.
ZigZag encoding is used to convert $atoms to signed integers. Positive signed integers correspond to even $atoms of twice their absolute value, and negative signed integers correspond to odd $atoms of twice their absolute value minus one. For example:
+abs:si
+abs:siAbsolute value.
Produces the absolute value of signed integer .a.
Accepts
.a is a signed integer.
Produces
An $atom.
Source
Examples
+dif:si
+dif:siSubtraction.
Produces the difference of .a minus .b.
Accepts
.a is a signed integer.
.b is a signed integer.
Produces
A signed integer.
Source
Examples
+dul:si
+dul:siModulus.
Produces the remainder of .b modulo .a.
Examples
.a is a signed integer.
.b is an $atom.
Produces
An $atom.
Source
Examples
+fra:si
+fra:siDivide.
Produces the quotient of .b divided by .c.
Accepts
.a is a signed integer.
.b is a signed integer.
Produces
A signed $atom.
Source
Examples
+new:si
+new:siAtom to @s.
Produces a signed integer from an $atom .b. The product's sign is determined by the value of flag .a: & will result in a prepending --, and | will result in a prepending -.
Accepts
.a is a $flag.
.b is an $atom.
Produces
A signed integer.
Source
Examples
+old:si
+old:siSign and absolute value.
Produces a cell composed of a %.y or %.n, depending on whether .a is positive or negative, and the absolute value of .a.
Accepts
.a is a signed integer.
Produces
A cell composed of a $flag and an $atom.
Source
Examples
+pro:si
+pro:siMultiplication.
Produces a signed integer by multiplying .a and .b.
Accepts
.a is an unsigned integer.
.b is an unsigned integer.
Source
Examples
+rem:si
+rem:siRemainder.
Produces a signed integer that is the remainder of .a divided by .b.
Accepts
.a is a signed integer.
.b is a signed integer.
Produces
A signed integer.
Source
Examples
+sum:si
+sum:siAddition.
Produces an $atom by adding .a and .b.
Accepts
.a is a signed integer.
.b is a signed integer.
Produces
A signed integer.
Source
Examples
+sun:si
+sun:si@u to @s.
Multiplies the unsigned integer .a by two, producing an $atom.
Accepts
.a is an unsigned integer.
Produces
An $atom.
Source
Examples
+syn:si
+syn:siSign test.
Tests whether signed $atom .a is positive or negative. %.y is produced if .a is positive, and %.n is produced if .a is negative.
Accepts
.a is a signed integer.
Produces
A $flag.
Source
Examples
+cmp:si
+cmp:siCompare.
Compares .a and .b to see which is greater. If .a is greater than .b, --1 is produced. If .b is greater than .a, -1 is produced. If .a and .b are equal, --0 is produced.
Accepts
.a is a signed integer.
.b is a signed integer.
Produces
A signed integer.
Source
Examples
Last updated