我需要创建一个函数,给定一个正整数列表(可能有重复的整数),计算所有三元组(在列表中),其中第三个数字是第二个的倍数,第二个是第一个的倍数:
(相同的数字不能在一个三元组中使用两次,但可以被所有其他三元组使用)
例如,[3, 6, 18]
是因为18
均匀地进入6
其中3
.
所以鉴于[1, 2, 3, 4, 5, 6]
它应该找到:
[1, 2, 4] [1, 2, 6] [1, 3, 6]
Run Code Online (Sandbox Code Playgroud)
并返回3
(它找到的三元组数)
我做了一些有效的功能,但效率不高.是否有一些我不知道的数学概念可以帮助我更快地找到这些三元组?具有更好功能的模块?我不知道该搜索什么...
def foo(q):
l = sorted(q)
ln = range(len(l))
for x in ln:
if len(l[x:]) > 1:
for y in ln[x + 1:]:
if (len(l[y:]) > 0) and (l[y] % l[x] == 0):
for z in ln[y + 1:]:
if l[z] % l[y] == 0: …
Run Code Online (Sandbox Code Playgroud)