More functional version.
def prime_factorize( number ):
def recurse( factors, x, n ):
if x<2: return factors
if n > 1+x**0.5:
factors.append( x )
return factors
if x%n==0:
factors.append( n )
return recurse( factors, x/n, n )
else:
return recurse( factors, x, n+1 )
return recurse( [], number, 2)
for num, factors in ((n, prime_factorize( n )) for n in range(1,50000)):
assert (num==reduce(lambda x,y:x*y, factors, 1)), (num, factors)
source
share