Предположим, что у нас есть список чисел, 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 элементов), время, которое требуется, увеличивается слишком сильно. Есть ли более быстрый/лучший способ сделать это?