def pfactors(n,primes=[2]): factors = [] for i in primes: if(n%i==0): while(n%i==0): n/=i factors.append(i) isprime = isPrime(n) if isprime and (not n in factors): factors.append(n) if(n==1 or isprime): return factors break if n!=1: for i in xrange(primes[len(primes)-1],n): ifprime = True for j in primes: if i%j==0: ifprime = False break if ifprime: if(n%i==0): while(n%i==0): n/=i factors.append(i) isprime = isPrime(n) if isprime and (not n in factors): factors.append(n) if(n==1 or isprime): return factors if(not i in primes): primes.append(i) if factors==[]: return [n] return factors
def lucaslehmer(p): if( not isPrime(p) ): return False # p must be prime s = 4 m = (1<<p)-1 for i in xrange(3,p+1): s = ((s*s)-2)%m return s==0