Welcome, guest | Sign In | My Account | Store | Cart
#!usr/bin/python
#FileName: sieve_once_again.py
#Python Version: 2.6.2
#Author: Rahul Raj
#Sat May 15 11:41:21 2010 IST


fi=0 #flag index for scaling with big numbers..
n=input('Prime Number(>2) Upto:')
s=range(3,n,2)

def next_non_zero():
    "To find the first non zero element of the list s"
    global fi,s
    while True:
        if s[fi]:return s[fi]
        fi+=1

def sieve():
    primelist=[2]
    limit=(s[-1]-3)/2
    largest=s[-1]

    while True:
        m=next_non_zero()
        fi=s.index(m)
        if m**2>largest:
            primelist+=[prime for prime in s if prime] #appending rest of the non zero numbers
            break
        ind=(m*(m-1)/2)+s.index(m)
        primelist.append(m)
        while ind<=limit:
            s[ind]=0
            ind+=m
        s[s.index(m)]=0

    #print primelist
    print 'Number of Primes upto %d: %d'%(n,len(primelist))
    
if __name__=='__main__':
    sieve()
    

History