请问这个问题怎么处理 已经有思路了 在图中 Python

img

说实话图中的思路我写了半天也不会实现,但是我自己做了一个,思路如下:(以20为例)
1、创建一个函数,寻找给出数字的因数中小于除数的因数。(即为图中的1,2,4)
(因为5,10,20就是1,2,4因式中的另一半因此不计数)
(一个数就是一个因式,但是有的因数是还可以继续分解的(比如2的因式的另一半10),因此下面继续分解)
2、将2对应的10进行再次执行函数,不对后面其他数字执行,因为会重复(可以自己试试,具体原因不知道怎么解释)
3、因此每次都对因数列表中的第二个数执行该函数即可,循环直至因数列表只有1个元素。
4、将每次统计的数量相加即可。

img

代码:

def factor(x, f_list, count):
    x = int(x)
    f_list.clear()
    for i in range(1, x):
        # 从1到x逐一进行判断是否能整除,且除数是否比自身大,都满足就留下来
        if x % i == 0 and i <= x / i:
            f_list.append(i)
            count += 1
    # 判断f_list是否只有1个数,如果只有一个数就只能返回列表中的第一个数1
    if len(f_list) == 1:
        return x / f_list[0], count
    else:
        return x / f_list[1], count


def main():
    # d是进行了几次循环,最后需要减去d,因为从第二次开始,每次分解都会多算一个因数1
    # count是函数内计算每个数进行分解时有几个因数,每次清零
    # f_list用于存储每次的因数,每次会清零
    d, count = 0, 0
    f_list = []
    x = input('请输入:')
    # 执行第一次因数分解
    re = factor(x, f_list, count)
    # 判断f_list里第二个数是否可继续分解(即列表内数是否只有1)
    while factor(re[0], f_list, count)[1] > 1:
        # 将上一个f_list中第二个数作为x,执行函数
        re = factor(re[0], f_list, re[1])
        d += 1
    else:
        print(re[1] - d)


if __name__ == '__main__':
    global c
    main()