def filterout(L1,L2):
""" inplace substraction of two lists"""
for i in L1:
if i in L2:
L2.remove(i)
def is_prime(n):
""" check if n is prime"""
i = 2
if n <=1:
return False
Sqrt_Of_n = n**0.5
while i <= Sqrt_Of_n:
if n % i == 0:
return False
i += 1
else:
return True
def primeGen(n):
"""
After the first 5 primes the next prime number is the sum of the last 2
minus the three prime numbers back
if it is not a prime number we go for the next one
"""
primes= [2,3,5,7,11]
if n in xrange(1,len(primes)+1):
return primes[:n]
else:
banlist=[]
count = 6
while count <= n :
Next = (primes[-2] + primes[-1]) - primes[-3]
if not is_prime(Next):
count -=1
banlist.append(Next)
count +=1
primes.append(Next)
filterout(banlist,primes)
return primes
if __name__ == '__main__':
print primeGen(1000)
Diff to Previous Revision
--- revision 1 2010-06-12 08:06:02
+++ revision 2 2010-06-12 08:22:40
@@ -33,12 +33,12 @@
banlist=[]
count = 6
while count <= n :
- res = (primes[-2] + primes[-1]) - primes[-3]
- if not is_prime(res):
+ Next = (primes[-2] + primes[-1]) - primes[-3]
+ if not is_prime(Next):
count -=1
- banlist.append(res)
+ banlist.append(Next)
count +=1
- primes.append(res)
+ primes.append(Next)
filterout(banlist,primes)
return primes