section 3bA, lite number theory
===============================

<h3 id="++fu"><code>++fu</code></h3>

    ++  fu                                                  ::  modulo (mul p q)
      |=  a=[p=@ q=@]
      =+  b=?:(=([0 0] a) 0 (~(inv fo p.a) (~(sit fo p.a) q.a)))
      |%

XX document

<h3 id="++dif"><code>++dif</code></h3>

      ++  dif
        |=  [c=[@ @] d=[@ @]]
        [(~(dif fo p.a) -.c -.d) (~(dif fo q.a) +.c +.d)]
      ::

XX document

<h3 id="++exp"><code>++exp</code></h3>

      ++  exp
        |=  [c=@ d=[@ @]]
        :-  (~(exp fo p.a) (mod c (dec p.a)) -.d)
        (~(exp fo q.a) (mod c (dec q.a)) +.d)
      ::

XX document

<h3 id="++out"><code>++out</code></h3>

      ++  out                                               ::  garner's formula
        |=  c=[@ @]
        %+  add
          +.c
        (mul q.a (~(pro fo p.a) b (~(dif fo p.a) -.c (~(sit fo p.a) +.c))))
      ::

XX document

<h3 id="++pro"><code>++pro</code></h3>

      ++  pro
        |=  [c=[@ @] d=[@ @]]
        [(~(pro fo p.a) -.c -.d) (~(pro fo q.a) +.c +.d)]
      ::

XX document

<h3 id="++sum"><code>++sum</code></h3>

      ++  sum
        |=  [c=[@ @] d=[@ @]]
        [(~(sum fo p.a) -.c -.d) (~(sum fo q.a) +.c +.d)]
      ::

XX document

<h3 id="++sit"><code>++sit</code></h3>

      ++  sit
        |=  c=@
        [(mod c p.a) (mod c q.a)]

XX document