素数を求めよ

https://www.spoj.pl/problems/PRIME1/を考えてた。
Pythonで提出できるから、いちど書いてから、もういちど書き直したのがこれ。
けっこう綺麗にかけた?

#!/usr/bin/env python
import math

def main():

    t=input() #何組の数字が入ってくるのか
    L=[] #最大値・最小値のリストを保存するリスト
    searchlist = [] #探索する値のリスト
    primelist = [] #見つかった素数のリスト

    #一組ずつLに加えてゆく
    for i in range(t):
        i = raw_input()
        L.append(i.split(" "))

    for i in L:
        searchlist = makeList(i)
        primelist = findPrime(searchlist,int(i[0]),int(i[1]) + 1)
        for i in primelist:
            print i
        print ""


def makeList(list):
    #listから最小値と最大値を取り出す
    start = int(list[0])
    end = int(list[1]) + 1

    #startからendまでのすべての整数を含むリストsearchlistをつくる
    searchlist= range(start,end)
    return searchlist


#素数を探す関数
def findPrime(searchlist,min,max):
    buffer = searchlist
    primelist = []
    i = 2
    sqrt_max = math.sqrt(max)

    while(i<sqrt_max):

        #iの倍数でminより大きい最小の数xを探す
        x=math.ceil(float(min)/i)
        x=x*i+i

        #限定エラストテネス
        #iがバッファに残っているなら素数
        if(i in buffer):
            #バッファからx+i,x+2i,x+3x...を消す
            while(x<=max):
                try:
                    buffer.remove(x)
                except:
                    pass
                x=x+i

        #次のiへ
        i=i+1

    #残ったbufferを返す
    return buffer


if __name__ == '__main__':
    main()

でも、これでも実行時間制限にひっかかる。6秒の壁は高いなあ。
どこを改良できるのかな...うーん。

最初に書いたやつ

なにかの時のために貼っとく
けど汚いからあんまり見ないで;;

#!/usr/bin/env python
import math

def main():

    t=input() #何組の数字が入ってくるのか
    L=[] #最大値・最小値のリストを保存するリスト
    searchlist = [] #探索する値のリスト
    primelist = [] #見つかった素数のリスト

    #一組ずつLに加えてゆく
    for i in range(t):
        i = raw_input()
        L.append(i.split(" "))

    for i in L:
        searchlist = makeList(i)
        primelist = findPrime(searchlist)
        for i in primelist:
            print i
        print ""


#素数かどうか調べる関数
def isThisPrime(i):
    s = math.sqrt(i)
    s = math.floor(s)

    for a in range(2,int(s)):
        if(i%s==0):
            #割り切れたら素数ではない
            return False
    #割り切れなかったら素数
    return True


#listからiの倍数を探す関数
def findFactorFromlist(i,list):
    factorlist = []
    if(i in list):
        for a in list:
            if( a % i == 0):
                factorlist.append(a)
    return factorlist



def makeList(list):
    #listから最小値と最大値を取り出す
    start = int(list[0])
    end = int(list[1]) + 1

    #startからendまでのすべての整数を含むリストsearchlistをつくる
    searchlist= range(start,end)
    return searchlist


#素数を探す関数
def findPrime(searchlist):
    slist = searchlist
    primelist = []
    comprositelist = []
    factorlist = []
    maxvalue = (slist[-1:])[0]

    #slistに入っている数字を一つずつみていく。
    #素数かどうか検証する前に、合成数のリストに入ってないか確認
    #素数を見つけたら、素数リストに追加して、
    #さらに見つけた素数の倍数を合成数のリストに追加しておく
    for a in slist:
        if not a in comprositelist:
            if(isThisPrime(a)):
                primelist.append(a)
                multiplier = 2
                while(a*multiplier<=maxvalue):
                    comprositelist.append(a*multiplier)
                    multiplier=multiplier+1

    #完成したprimelistを返す
    return primelist


if __name__ == '__main__':
    main()