python笔记:分解质因数


# 分解质因数,如90 = 2 * 3 * 3 * 5,

# 1。分成两步走,一是判断质数,二是对传入的数字进行处理
def iszhishu(num):
    if num <= 1:
        return False
    else:
        for i in range(2, num):
            if num % i == 0:
                return False
        return True

def myfunc(num):
    list1 = []
    num = int(num)
    tmp = num
    # 用了两个循环,一个for,一个while
    if iszhishu(num) or num<=1 or not num:
        return r"能写成质因数乘积这种形式的只能是大于1的正整数,请检查参数"
    else:
        for i in range(int(num/2)+1):
            while iszhishu(i) and tmp%i==0:
                tmp = tmp/i
                list1.append(i)
        if list1:
            print("{}={}".format(num,list1[0]),end='')
            for i in range(1,len(list1)):
                print("*{}".format(list1[i]),end='')

        # 没有return语句,会默认返回None
        return ""


# 2。借鉴的方法,核心是两个for循环+break,不太好处理
def my_func2(num):
    f = []
    if int(num) and int(num)>=4:
        num = int(num)
        n = num
        # 需要多次循环,防止遗留4,6,9这种因数,我们需要的是2,3这种质因数的乘积
        for j in range(int(num/2+1)):
            # 处理的是余数
            for i in range(2,n):
                # 如果i能整除,则说明i是质因数
                if n%i==0:
                    # 存储这个质因数
                    f.append(i)
                    # 对n取余数,用整除,向下取整
                    n=n//i
                    # 拿到一个质因数马上推出内层的for循环,回到外层的for循环,防止出现4,6,9这种质因数
                    break
        if len(f)==0:
            return r"传入的参数无法写成这种形式"
        else:
            f.append(n)
            f.sort()
            print('{}={}'.format(num,f[0]),end='')
            for i in range(1,len(f)):
                print('*{}'.format(f[i]),end='')
    return ""



if __name__=="__main__":
    print(myfunc(32))
    print(my_func2(32))

你可能感兴趣的:(python)