**addition**- The operation of addition with carry
:where (
*W*×*W*×{0, 1}*W*×{0, 1}*a*,*b*,) (*c*,) which satisfies*a*+*b*+ =*c*+^{ . }*M* **subtraction**- The operation of subtraction with borrow
:where (
*W*×*W*×{0, 1}*W*×{0, 1}*a*,*b*,) (*c*,) which satisfies*a*-*b*- =*c*-^{ . }*M* **multiplication**- The operation of multiplication with
remainder
:where (
*W*×*W**W*×*W**a*,*b*) (*c*,*d*) which satisfies*a*^{ . }*b*=*c*^{ . }*M*+*d* **division**- The operation of division with
remainder (this is a partial function)
:where (
*W*×*W*×*W**W*×*W**a*,*b*,*c*) (*d*,*e*) when*b*<*a*and satisfies*b*^{ . }*M*+*c*=*a*^{ . }*d*+*e**e*<*a*.

The main aim of this section is to write down methods of computing
with integers written in the ``usual'' way as strings of symbols
*u*_{1}*u*_{2}^{ ... }*u*_{p} representing
*u*_{1}^{ . }*M*^{p - 1} + ^{ ... } + *u*_{1}. We
will also count the number of steps taken to make our calculations
under the assumption that each of the above operations counts as one
step.

- 1.1 Addition and Subtraction Algorithm
- 1.2 Multiplication Algorithm
- 1.3 Long Division Algorithm
- 1.4 Using the shift operations
- 1.5 Faster Algorithms
- 1.6 GMP and other implementations