我正在寻找一种算法来计算给出特定产品的所有可能组合的数量。我有一个完美平方列表 [1,4,9,16,..,n],我有两个值 a, b,其中 a - 我们可以在乘法中使用以获得完美平方的元素数量,b - 最大值例如,如果 a = 3 且 b = 6,则对于完全平方数 36,我们可以有诸如 [1,6,6]、[2,3,6]、[4、 3,3]等等(顺序问题[1,6,6]和[6,6,1]不同)。注意我们不能使用 [1,9,4] 组合,因为 9 > b
我尝试使用 itertools 中的每个完美平方的所有除数的组合,之后我检查了组合的每个乘积,如果 x1 x2 x3 == 36,我在完美平方 = 36 的计数中添加 1。这个算法有效,但它长乘法需要大量时间。
我们能否让它比查看每个完美正方形的每种组合更快?
def get_divisors(n):
result = []
for i in range(1, n//2 + 1):
if n % i == 0:
result.append(i)
result.append(n)
return result
a = 2
b = 3
count = 0
all_squares = [1,4,9]
for i in all_squares:
divisors = get_divisors(i)
for r …Run Code Online (Sandbox Code Playgroud)