After some muddling, here is a prime tester factory:

```
def factory(n):
P = primes_to_n(int(n ** 0.5 + 1))
def is_p(x):
if x < 2: return False
if x > 2:
for i in P:
if x % i == 0 and i != x: return False
return True
return is_p
```

We give the factory an upper limit for which to produce a list of primes then return a function with that list instantiated in its scope.

To create a function that can test primeness for numbers up to a million, we only need all the primes up to 1001. 1009 is Prime so we could set the limit to 1010.

Eg.

```
>>> primes_to_n(1010)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79,
83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167,
173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257,
263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353,
359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449,
457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563,
569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653,
659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761,
769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877,
881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991,
997, 1009]
```

this limits our function to a maximum 169 iterations. So our custom function could be,

`primes_to_M = factory(1010)`

This function has the above list built in and can test any number up to the square of 1009 (which is not prime) but minus one it might be. As it turns out, minus 14 is prime.

```
>>> primes_to_M(1018067)
True
```