Предположим, что у нас есть список чисел, l. Мне нужно СЧЕТЬ все кортежи длины 3 из l, (l_i,l_j,l_k), что l_i равномерно делит l_j, а l_j равномерно делит l_k. При условии, что индексы i,j,k имеют отношение i<j<k
Т.е.;
Если l=[1,2,3,4,5,6], то кортежи будут [1,2,6], [1,3,6],[1,2,4], поэтому COUNT будет 3.
Если l=[1,1,1], то единственным кортежем будет [1,1,1], поэтому COUNT будет равным 1.
Вот что я сделал до сих пор, используя списки:
def myCOUNT(l):
newlist=[[x,y,z] for x in l for y in l for z in l if (z%y==0 and y%x==0 and l.index(x)<l.index(y) and l.index(y)<l.index(z))]
return len(newlist)
>>>l=[1,2,3,4,5,6]
>>>myCOUNT(l)
3
Это работает, но по мере того, как l становится длиннее (и может достигать 2000 элементов), время, которое требуется, увеличивается слишком сильно. Есть ли более быстрый/лучший способ сделать это?