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

Войдите, чтобы написать ответ

Похожие вопросы