素数を再帰で。

なんか、ぐぐっても出てこなかったので。
もっとどうにかならんのかなあ。数学的な定義でってところと、
メモ化なりなんなりしないととてつもなく遅いあたり。

def primes(n):
        if n<=1: raise ValueError
        if n==2: return [2]
        p= primes(n-1)
        q= list(filter(lambda x: n%x==0,p))
        if len(q)==0: p=p+[n]
        return p

def isprime(n):
        if n<=1: raise ValueError
        if n==2: return True
        def primes(n):
                return filter(lambda x: isprime(x), range(2,n+1))

        return len(list(filter(lambda x: n%x==0, primes(n-1))))==0