Задать вопрос
Alexander_tt0
@Alexander_tt0
Интеграл в уме

Что я сделал не так?

L, R=map(int,input().split())

def simpleDividers(n):
    answer = []
    d = 2
    while d * d <= n:
        if n % d == 0:
            answer.append(d)
            n //= d
        else:
            d += 1
    if n > 1:
        answer.append(n)

n=L
ans=[]
for i in range(L, R+1):
    ans.append(simpleDividers(n)[len(simpleDividers(n))+1])
    n+=1
print(*ans)


Вывести в одну строку через пробел в порядке возрастания для каждого числа на отрезке [L..R] его самый большой простой делитель.
Не могу понять, что сделал не так.
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Простой 2 комментария
Решение пользователя Vindicar К ответам на вопрос (2)
Vindicar
@Vindicar
RTFM!
В-нулевых, пиши симптомы ошибки.
Во-первых, simpleDividers(n)[len(simpleDividers(n))+1]
Тебе что, палец отрезают за каждую использованную локальную переменную?
Зачем два раза вычислять simpleDividers(n)? Почему не закинуть результат в переменную?
Во-вторых, ты пытаешься обратиться к элементу списка с номером, превышающим его длину (потому что +1).
Т.е. если у числа три делителя, ты бы обратился к номеру 4. Как по-твоему, это получится сделать?
В-третьих, ты не возвращаешь answer через return при возврате из simpleDividers(), а код ниже написна так, словно ты его возвращаешь.
Ответ написан
Комментировать