数的质因数分解

Posted

技术标签:

【中文标题】数的质因数分解【英文标题】:Prime factorization of a number 【发布时间】:2017-03-30 21:56:16 【问题描述】:

我正在尝试编写一个程序来查找给定数字的所有质因数,并尝试了以下操作:

def factors(nr):
    i = 2
    factors = []
    while i<nr:
        if (nr%i)==0:
            factors.append(i)
            nr = nr/i
        else:
            i = i+1
    return factors

我的想法如下。从 i = 2 开始,当 i

我知道网站上发布了几个正确答案,但我想知道为什么我的程序不正确。

更新 因此,如果我让程序运行例如:

因素(38),产生 [2]。

因素(25),产生 [5]。

所以它在向列表中添加一个数字后停止。

【问题讨论】:

@WillNess 但实际上,DavidCullen 已经回答了我的问题 现在,您已经编辑了,我们可以建议您尝试您的原始代码,例如与 30. 它是否也只在列表中添加一个数字?不。它实际上没有添加________(完成句子)。这为您提供了一个很好的线索来了解您的代码有什么问题。能够自己找到它必须更具启发性,毕竟它是通过您提供测试用例来实现的。指南的存在是有原因的。 【参考方案1】:

解决问题的最简单更改是更改 while 循环条件:

def factors(nr):
    i = 2
    factors = []
    while i <= nr:
        if (nr % i) == 0:
            factors.append(i)
            nr = nr / i
        else:
            i = i + 1
    return factors

print factors(8)
print factors(9)
print factors(10)

输出

[2, 2, 2]
[3, 3]
[2, 5]

【讨论】:

【参考方案2】:
def ba(n):
    pfa=[]
    y=n
    for i in range(n):
        if (i!=0 and i!=1):
            while (y%i==0):
                pfa.append(i)
                y=y/i
    print(pfa)

【讨论】:

添加一些关于为什么如何解决手头问题的解释会大大改善您的纯代码答案 感谢您的建议。我写了解释。我想贡献这个网站,非常欢迎像你这样的 cmets。 另外,请注意您有一个缩进错误。虽然很清楚在这种情况下如何修复错误,但此处发布的代码应该能够被复制粘贴并在没有错误的情况下运行 哎呀!!!是的,我可以看到缩进错误....下次我会记住这一点......感谢您的建议 你知道你可以(并且应该)edit你的答案

以上是关于数的质因数分解的主要内容,如果未能解决你的问题,请参考以下文章

AcWing - 197 - 阶乘分解

分解质因数

算法设计-枚举分治素数约数质因数分解

最大公因数,最小公倍数,因式分解

在分解质因数的时候,一般从啥的质因数考虑?

codeforces 1025B Weakened Common Divisor(质因数分解)