找到所有以数字的乘数(不同于1)写数字的方法。
例如:
12 = 12、12 = 2 * 6、12 = 3 * 4、12 = 2 * 2 * 3
我不知道如何解决这个问题,并且花了几天时间阅读有关因素,筛子和类似主题的信息
答案 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”。