fixed p5(), which broke after implementation of PRB factorization with
the following trace:

<ipython-input-3-11cc4afbfac8> in <module>()
----> 1 list([nttools.pfactor(n) for n in range(2,20+1)])

<ipython-input-3-11cc4afbfac8> in <listcomp>(.0)
----> 1 list([nttools.pfactor(n) for n in range(2,20+1)])

/home/ephelps/projects/euler/nttools.py in pfactor(N, myprimes)
    159         f = prb(N)
    160         myprimes.append(f)
--> 161         p = pfactor(int(N / f), myprimes)
    162     return myprimes

/home/ephelps/projects/euler/nttools.py in pfactor(N, myprimes)
    157         myprimes.append(N)
    158     else:
--> 159         f = prb(N)
    160         myprimes.append(f)
    161         p = pfactor(int(N / f), myprimes)

/home/ephelps/projects/euler/nttools.py in prb(N)
    125     if N % 2 == 0:
    126         return 2
--> 127     (y, c, m) = (random.randint(1, N - 1), random.randint(1, N - 1),
    128                  random.randint(1, N - 1))
    129     (g, r, q) = (1, 1, 1)

/usr/lib/python3.3/random.py in randint(self, a, b)
    212         """
    213
--> 214         return self.randrange(a, b+1)
    215
    216     def _randbelow(self, n, int=int, maxsize=1<<BPF, type=type,

/usr/lib/python3.3/random.py in randrange(self, start, stop, step, int)
    190             return istart + self._randbelow(width)
    191         if step == 1:
--> 192             raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))
    193
    194         # Non-unit step argument supplied.

ValueError: empty range for randrange() (1,1, 0)