def sift(numlist,k):
# remove all multiples of k from numlist
    index = 0
    while index < len(numlist):
        if numlist[index] % k == 0:
            numlist.remove(numlist[index])
        else:
            index = index + 1
    return numlist

def sieve(n):
# return a list of all primes up to n
    numlist = []
    for i in range(2,n+1):
        numlist.append(i)
    primelist = []
    while len(numlist) > 0:
        primelist.append(numlist[0])
        lastprime = primelist[len(primelist)-1]
        numlist = sift(numlist, lastprime) # call sift above with k=lastprime
    return primelist
