
import time
def Primedivisor(n):                                        # This is a function that will try to find a (small) factor of a (large) prime n
    for d in range(2, min(n,100000)):                       # We try to find a factor n, but give up if we get to 100000 with no luck
        if n % d == 0:                                      # If d divides n, success!
            return d
        d = d + 1                                           # Otherwise, keep trying (but give up at 100000)
    return n                                                # If no luck, return n, which may or may not be prime

listlength = int(input("How many 'small' primes do we look for? "))
Euclidprimes = [2]                                          # Initialize the list at the single prime 2
while len(Euclidprimes) < listlength:                       # We'll stop when our list gets to the inputted length
    Prod = 1
    for i in range(len(Euclidprimes)):                      # Compute the Euclid number (product of the primes plus 1)
        Prod = Prod*Euclidprimes[i]
    Euclid = Prod + 1
    print("This is the new Euclid number ", Euclid)
    New = Primedivisor(Prod + 1)                            # Ship the Euclid number off to the function to try to find a small factor
    print("This is the small factor of the Euclid number ", New)
    for j in range(len(Euclidprimes)):                      # If the factor of the Euclid number really is small,
        if Euclidprimes[j] > New:                           # redo the list of primes, shedding the big ones and only
            Euclidprimes = Euclidprimes[0:j] + [New]        # keeping the primes up to the new small one
            break
        elif j == len(Euclidprimes) - 1:                    # otherwise just tack the big number to the list and hope for the best
            Euclidprimes = Euclidprimes + [New]
    print(Euclidprimes)                                     # print out the list we've got so far
    print("")
    time.sleep(5)





