def prime_factors(n): """Yield primes which evenly divide n.""" sqrt_n = n ** 0.5 for p in primes(): if p > sqrt_n: return if not n % p: yield p
def first_factor(n): """Find the smallest positive integer that evenly divides n.""" sqrt_n = n ** 0.5 for p in primes(): if p > sqrt_n: # n must be prime return n if not n % p: return p
def nth_prime(n): """Find the nth prime number.""" return next(islice(primes(), n - 1, None))