【问题标题】:Find all ways to write a number as multiply of numbers找到所有将数字写成数字乘积的方法
【发布时间】:2019-01-23 13:15:17
【问题描述】:

找出所有将数字写成数字的乘积(不同于 1)的方法。

例如:

12 = 12, 12 = 2 * 6, 12 = 3 * 4, 12 = 2 * 2 * 3

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

【问题讨论】:

  • 如果您需要帮助来制作解决此问题的程序,您需要方式更具体,并展示您尝试过的方法和无效的方法;这个问题看起来就像简单地找人来解决家庭作业问题,而这些问题通常是不受欢迎的。如果您需要以数学方式解决此问题,那么您在错误的站点中询问。或许您可以在Math.SE 上找到帮助

标签: combinatorics number-theory


【解决方案1】:

一种简单的递归方法:

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

输出

> python3 test.py
{(2, 2, 3), (2, 6), (3, 4)}
{(5, 5)}
{(3, 3, 9), (3, 3, 3, 3), (3, 27), (9, 9)}
>

我没有像引用副本中的所有建议那样明确地首先关注质数除数,而是让它全部发挥作用。不是最佳的(应该避免重复而不是使用集合来消除它)但足够简单,并且不需要数天的研究。

我没有包含您的“12 = 12”结果,因为它实际上是“12 = 12 * 1”并且您说“与 1 不同”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多