寻找各种方法将数字写为数字的乘积

时间:2018-08-16 14:24:14

标签: combinatorics number-theory

找到所有以数字的乘数(不同于1)写数字的方法。

例如:

  

12 = 12、12 = 2 * 6、12 = 3 * 4、12 = 2 * 2 * 3

我不知道如何解决这个问题,并且花了几天时间阅读有关因素,筛子和类似主题的信息

1 个答案:

答案 0 :(得分:0)

一种简单的递归方法:

/( ?[0-9]+ ?[\*\-\/\+\=\%\^])+ ?[0-9]+ ?/

输出

def get_equations(n):
    equations = set()

    quotient, remainder = divmod(n ** 0.5, 1)

    for divisor in range(n - 1, int(quotient if remainder else quotient - 1), -1):

        quotient, remainder = divmod(n, divisor)

        if remainder == 0:

            equations.add(tuple(sorted([divisor, quotient])))

            for sub_equation in get_equations(divisor):
                equations.add(tuple(sorted([*sub_equation, quotient])))

    return equations

print(get_equations(12))
print(get_equations(25))
print(get_equations(81))

与引述重复项中的所有建议一样,我没有明确地优先遵循素数除数,而是让它们全部发挥作用。不是最优的(应该避免重复而不是使用集合来消除重复),但是写起来足够简单,不需要花费大量的研究时间。

我没有包括您的“ 12 = 12”结果,因为它实际上是“ 12 = 12 * 1”,而您说的是“不同于1”。