Speeding up prime factorization
Correctness

1 is not a prime factor:

&gt;&gt;&gt; find_prime_factors(25)
[5, 5, 1]


Performance

Primality testing is expensive.  You call is_prime() twice on every iteration of the main loop of find_prime_factors().  Furthermore, is_prime() performs trial division in much the same way that find_prime_factors() does, resulting in redundant work.