如何在python中实现2d数组/里程表?
我正在研究一种算法,它能从一个数的素数因子中找出它的所有因子。这是我到目前为止的代码如何在python中实现2d数组/里程表?,python,python-3.x,prime-factoring,Python,Python 3.x,Prime Factoring,我正在研究一种算法,它能从一个数的素数因子中找出它的所有因子。这是我到目前为止的代码 def is_prime(x): return all(x % i for i in range(2, x)) def next_prime(x): return min([a for a in range(x+1, 2*x) if is_prime(a)]) def numFactors(n): factors = {1, n} primeFactors = dict()
def is_prime(x):
return all(x % i for i in range(2, x))
def next_prime(x):
return min([a for a in range(x+1, 2*x) if is_prime(a)])
def numFactors(n):
factors = {1, n}
primeFactors = dict()
s = n
while s != 1:
# print(s)
pr = 2
while s % pr != 0:
pr = next_prime(pr)
if pr in primeFactors.keys():
primeFactors[pr] += 1
else:
primeFactors[pr] = 1
factors.add(pr)
factors.add(int(s/pr))
s = int(s/pr)
这段代码为我提供了一个包含所有素因子及其指数的字典。例如,120给出了{2:3,3:1,5:1}
我要做的是让每一个因素都像这样:(2^1*3^0*5^0),(2^2*3^0*5^0).
这多少是一个类似这样的里程表
(0 0 0)
(1 0 0)
(2 0 0)
(3 0 0)
(0 1 0)
(1 1 0)
(2 1 0)
...
如何从primeFactors值实现这一点?我似乎无法组合正确的循环组合,尤其是因为每列都有不同的最大整数。您可以尝试
itertools.product
来自itertools导入产品的
d={2:3,3:1,5:1}
keys=d.keys()
可能性=['*'.产品中i的联接([f'{j[0]}^{j[1]}用于zip中的j(键,i)])([d中的v的范围(v+1)。值()])]
打印(可能)
非常感谢。重新设计了这个解决方案,它满足了我的需要。
['2^0*3^0*5^0',
'2^0*3^0*5^1',
'2^0*3^1*5^0',
'2^0*3^1*5^1',
'2^1*3^0*5^0',
'2^1*3^0*5^1',
'2^1*3^1*5^0',
'2^1*3^1*5^1',
'2^2*3^0*5^0',
'2^2*3^0*5^1',
'2^2*3^1*5^0',
'2^2*3^1*5^1',
'2^3*3^0*5^0',
'2^3*3^0*5^1',
'2^3*3^1*5^0',
'2^3*3^1*5^1']