#/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)

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐