<p>我看到的问题是,你们都在检查<code>d</code>的平方是否小于<code>n</code>(<code>d*d <= n</code>或<code>d**2 <= n</code>),并且在发现因子时重新分配<code>n</code>(<code>n //= d</code>)。这不包括不必要的<code>break</code>语句</p>
<p>以下是我所做的:</p>
<pre class="lang-py prettyprint-override"><code>>>> def factorization(n):
factors = []
d = 2
while d <= n:
if n % d == 0:
factors.append(d)
n //= d
d = 2
else:
d += 1
return factors
>>> factorization(104)
[2, 2, 2, 13]
>>> factorization(9)
[3, 3]
>>>
</code></pre>
<p>此方法隐式检查<code>d**2</code>是否小于或等于<code>n</code>,因为要满足<code>while</code>条件,<code>n // d</code>必须小于或等于<code>d</code>,因此<code>d**2</code>必须小于或等于<code>n</code></p>
<p>要打印素因子分解,请执行以下操作:</p>
<pre class="lang-py prettyprint-override"><code>>>> num = 104
>>> factors = factorization(num)
>>> print(f"The prime factors of {num} are {factors}")
The prime factors of 104 are [2, 2, 2, 13]
>>> print(f"The prime factors of {num} are {', '.join(factors)}")
The prime factors of 104 are 2, 2, 2, 13
</code></pre>