#/use/bin/env python
#-*-coding:utf-8-*-
"this is a custom module"
import math
def isprime(num):
if num <= 1:
return False
value = int(math.sqrt(num) + 1)
for n in range(2, value):
if num % n == 0:
break
else:
return True
return False
def getfactorsex(num):
"""接受一个整型作为参数,
返回它所有约数的列表,
包括1和本身
"""
if num <= 0:
return None
factors = [n for n in range(1, num+1) if (num % n == 0)]
return factors
def primefactordecompose(num):
"""
素数因子分解
接受一个整型作为参数,返回该整数所有素数因子的列表。
这个过程叫做求素因子分解,它输出的所有因子之积应该是原来的数字。
注意列表里可能有重复的元素。例如输入20,返回结果应该是[2,2,5]
"""
factors = getfactorsex(num)
prime_list = []
for n in factors:
if isprime(n):
prime_list.append(n)
if len(prime_list) == 0:
return None
result = []
product_ = 1
for p in prime_list:
product_ *= p
result.append(p)
if product_ != num:
v = num / product_
#再次分解
temp_value = primefactordecompose(v)
if temp_value is not None:
result += temp_value
return result
if __name__ == '__main__':
print primefactordecompose(20)
print primefactordecompose(128)
print primefactordecompose(280)
print primefactordecompose(1000)