Быстрая реализация Python с использованием оптимизации @ user3386109
На первом этапе проверяется, продолжается ли прогрессирование с множителем N для i-го элемента
Второй этап - получение самой длинной последовательности для каждого N - может быть сделан более кратким
res
содержит самые длинные прогрессии для (N:(count, endingindex)
{2: (3, 4), 3: (3, 9)}
import math
lst = [2,10,4,3,8,6,9,9,18,27]
l = len(lst)
mp = {}
mn = min(lst)
mx = max(lst)
nmax = int(math.sqrt(mx / mn))
for i in range(2, l):
for n in range(2, min(i, (l - 1)//2, nmax) + 1):
if lst[i - n] * n == lst[i]:
t = (i-n, n)
le = mp[t] if t in mp else 1
mp[(i, n)] = le + 1
res = {}
for x in mp:
n = x[1]
le = mp[x]
ending = x[0]
if n in res:
if res[n][0] < le:
res[n] = (le, ending)
else:
res[n] = (le, ending)
print(mp)
print(res)
{(2, 2): 2, (4, 2): 3, (5, 2): 2, (6, 3): 2, (8, 2): 2, (8, 3): 2, (9, 3): 3}
{2: (3, 4), 3: (3, 9)}