问题是你的逻辑太复杂了,你自己被绊倒了。特别是,您多次识别因素。结果,当您遍历嵌套循环时,因子列表(您将其命名为 array)中有一些因子的多个副本,因此该列表的乘积绝不是原始数字。因此,您永远不会对数组进行排序和返回,而是退出到函数的最后一行,返回空列表。
尝试使用已知正确的方法之一,而不是此算法。最重要的是,当您找到一个因子并将其放入列表中时,将x 除以因子,然后继续分解商。您的逻辑问题源于对原始数字的处理,然后尝试确定您找到的因子的新组成部分。
这是带有一些基本跟踪打印的代码:
def primeFactorization(x):
i=2
array=[]
for i in range(i,x+1):
if x % i == 0:
print x, "divisible by", i
j = 2
for j in range(j,x+1):
if i % j == 0:
print i, "divisible by", j, "resetting"
i = j
array.append(i)
print "New factor", array
product_value = 1
for j in array:
product_value = j*product_value
if product_value == x:
array.sort()
return array
return []
print primeFactorization(110019)
输出:
110019 divisible by 3
3 divisible by 3 resetting
New factor [3]
110019 divisible by 7
7 divisible by 7 resetting
New factor [3, 7]
110019 divisible by 13
13 divisible by 13 resetting
New factor [3, 7, 13]
110019 divisible by 21
21 divisible by 3 resetting
New factor [3, 7, 13, 3]
110019 divisible by 31
31 divisible by 31 resetting
New factor [3, 7, 13, 3, 31]
110019 divisible by 39
39 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3]
110019 divisible by 91
91 divisible by 7 resetting
New factor [3, 7, 13, 3, 31, 3, 7]
110019 divisible by 93
93 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3]
110019 divisible by 169
169 divisible by 13 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13]
110019 divisible by 217
217 divisible by 7 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7]
110019 divisible by 273
273 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3]
110019 divisible by 403
403 divisible by 13 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13]
110019 divisible by 507
507 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3]
110019 divisible by 651
651 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3]
110019 divisible by 1183
1183 divisible by 7 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3, 7]
110019 divisible by 1209
1209 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3, 7, 3]
110019 divisible by 2821
2821 divisible by 7 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3, 7, 3, 7]
110019 divisible by 3549
3549 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3, 7, 3, 7, 3]
110019 divisible by 5239
5239 divisible by 13 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3, 7, 3, 7, 3, 13]
110019 divisible by 8463
8463 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3, 7, 3, 7, 3, 13, 3]
110019 divisible by 15717
15717 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3, 7, 3, 7, 3, 13, 3, 3]
110019 divisible by 36673
36673 divisible by 7 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3, 7, 3, 7, 3, 13, 3, 3, 7]
110019 divisible by 110019
110019 divisible by 3 resetting
New factor [3, 7, 13, 3, 31, 3, 7, 3, 13, 7, 3, 13, 3, 3, 7, 3, 7, 3, 13, 3, 3, 7, 3]
[]