Python 得到给定数的因子乘积的组合
我不确定这个问题之前是否发布过,在搜索之后,我找不到它Python 得到给定数的因子乘积的组合,python,algorithm,numbers,Python,Algorithm,Numbers,我不确定这个问题之前是否发布过,在搜索之后,我找不到它 问题:请给出一个数字,以打印全要素产品 例如: 给定编号:20 Output: 1 * 20 2 * 10 2 * 2 * 5 4 * 5 给定编号:30 Output: 1 * 30 2 * 15 2 * 3 * 5 3 * 10 5 * 6 以下是我的想法: 解决方案1。 步骤1)首先,得到这个数的所有素数因子 de
问题:请给出一个数字,以打印全要素产品 例如:
给定编号:20
Output: 1 * 20
2 * 10
2 * 2 * 5
4 * 5
给定编号:30
Output: 1 * 30
2 * 15
2 * 3 * 5
3 * 10
5 * 6
以下是我的想法: 解决方案1。
- 步骤1)首先,得到这个数的所有素数因子
def get_prime_factors(n): factors = [] if n == 0: return factors # Get the number of 2s that divide n while n%2 == 0: factors.append(2) n /= 2 # n must be odd for i in range(3, int(ceil(sqrt(n))), 2): while n%i == 0: factors.append(i) n /= i # handle the case n is prime number greater than 2s if n > 2: factors.append(n) return factors
- 步骤2)然后得到这些因素的组合
def get_factors_recv(n, cur_ret, ret):
for i in range(2, int(ceil(sqrt(n)))):
if n%i == 0:
fact_arr = [i, n/i]
# add the current value to current result
cur_ret.extend(fact_arr)
if sorted(cur_ret) not in ret:
ret.append(sorted(cur_ret))
# backtracking
cur_ret = cur_ret[:-2]
get_factors_recv(n/i, cur_ret + [i], ret)
def get_all_factors_product(n):
if n == 0:
return '';
result = []
# push the simple factor multiplier
result.append([1, n])
get_factors_recv(n, [], result)
return result
- 我想知道上述代码是否有任何优化?(问题2)
- 有没有更好的解决办法?(问题3)
- 一个简单的while循环可以解决您的第一个重复问题。给定一个数字:
num_list = []
i = 2;
num = 72*5*5*19*10
while i <=num:
if(num%i == 0):
num_list.append(i)
num = num/i
else:
i = i + 1
print num_list
num_列表将包含这些因素。这样做的目的是在数字不再被它整除之前,不增加索引变量。而且,每次除法后,循环的次数会不断减少,因此循环实际运行的迭代次数会比实际次数少得多。而不是
while i<=num
你也可以使用
while i<=num/2
这在数学上是正确的,并导致迭代次数进一步减少
这将为您提供所有因素。希望这有帮助
number = 30
factors = []
for i in range(1, number+1):
if number%i == 0:
factors.append(i)
print factors
有效地分解因子是一个困难的数学问题。但是如果你只对小数字感兴趣,那么你的算法的效率就没有多大关系了。目前最大的努力就是这样。下面是如何生成素数列表的一个变体(中等效率)。结果不符合我的问题。