Добрый день всемWindows, Python 3.8
Четвертый день бъюсь над задачей № 47 проекта Эйлера http://euler.jakumo.org/problems/view/47.html
Код сделал, он считает и эти 4 числа он находит:
Python:
def primfacs(t):
quan = []
for n in range(3, t):
i = 2
primfac = []
n1 = n
while i * i <= n:
while n % i == 0:
primfac.append(i)
n = int(n / i)
i = i + 1
if n > 1:
primfac.append(n)
if len(set(primfac)) == 4:
quan.append(n1)
res = []
for i in range(1, len(quan) - 1):
if quan[i + 1] - quan[i] == 1 and quan[i + 2] - quan[i + 1] == 1 and quan[i + 3] - quan[i + 2] == 1:
res.append(quan[i])
res.append(quan[i + 1])
res.append(quan[i + 2])
res.append(quan[i + 3])
print(f'res=', res)
break
else:
res = []
primfacs(1000000)
Здесь в первой части кода мы находим простые множители чисел из ряда (1, t) и те числа, у которых по 4 множителя записываем в отдельный список
Во второй части проверяем эти числа на последовательность 4 подряд идущих чисел
Но получился этот код некрасивым и не универсальным. Во-первых, не получилось у меня сделать так, чтобы он сам создавал ряд чисел, среди которых надо искать. Из за этого пришлось задавать ряд вручную, что привело к лишним вычислениям
И еще обнаружил, что нет проверки уникальности множителей
И так как тут повторяющиеся операции, попытался все оформить в декоратор, но не получилось
Не могли бы вы предложить правильно оформленное решение или ссылку на него дать, а то что то я его не нашел