Форум » Обработка целых чисел » Ошибка в решении 25-204? » Ответить
Ошибка в решении 25-204?
Тузова: Коллеги, добрый день. Нет ли ошибки в записи функции для формирования списка делителей в решении к задаче 25-204? [pre2] def allDivs( n ): q = round( n**0.5 ) divs = [q] if n % q == 0 else [] for d in range(2,q): if n % d == 0: divs.extend( [d, n//d] ) return sorted(divs) print (allDivs(43890))[/pre2] Теряется делитель 210
Ответов - 3
Тузова: Наверное, так правильнее: [pre2] def allDivs( n ): q = round( n**0.5 ) if n % q == 0 and n // q == q: divs = [q] elif n % q == 0 and n // q == q + 1: divs = [q, q + 1] else: divs = [] for d in range(2,q): if n % d == 0: divs.extend( [d, n//d] ) return sorted(divs)[/pre2]
Поляков: Да, спасибо. Вот правильный вариант: [pre2]def allDivs( n ): q = round( n**0.5 ) divs = [] if n % q != 0 else \ [q] if q == n // q else \ [q, n//q] for d in range(2,q): if n % d == 0: divs.extend( [d, n//d] ) return sorted(divs) [/pre2]Я все проверил, на ответы эта ошибка нигде не повлияла.
cabanov.alexey: [pre2] def allDivs( n ): divs = set() for d in range(2,int(n**0.5)+1): if n % d == 0: divs |= {d, n//d} return sorted(divs) print (allDivs(43890))[/pre2]
полная версия страницы