In the workshop we will work with a finite field of prime size. This means we take a prime number p, and then work with integers in the domain {0, 1, 2, …, p – 1}. The idea is that we can treat this set of integers in the same way we treat real numbers: we can add them (but we need to take the result modulo p, so that it will fall back in the set), subtract them, multiply them and divide them. You can even define polynomials such as f(x)=a+bx

^{2} where the coefficients a,b and the input x are all numbers in this finite set. Since the addition and multiplication are done modulo p, the output f(x) will also be in the finite set.
One interesting thing to note about finite fields, which is different from real numbers, is that there is always an element, g, called the generator (in fact there is more than one), for which the sequence 1, g, g

^{2}, g

^{3}, g

^{4}, …, g

^{p-2} (whose length is p-1) covers all the numbers in the set but 0 (modulo p, of course). Such a geometric sequence is called a

**cyclic group**.
We will supply you with python classes that implement these things so you don’t have to be familiar with how these are implemented (though the

algorithm for division in a finite field is not that trivial).