Автор | Сообщение |
|
Отправлено: 18.03.22 18:15. Заголовок: Ошибка в решении 25-204?
Коллеги, добрый день. Нет ли ошибки в записи функции для формирования списка делителей в решении к задаче 25-204? 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)) Теряется делитель 210
|
|
|
Ответов - 3
[только новые]
|
|
|
Отправлено: 18.03.22 18:33. Заголовок: Наверное, так правил..
Наверное, так правильнее: 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)
|
|
|
|
| Администратор
|
Сообщение: 3391
|
|
Отправлено: 18.03.22 18:38. Заголовок: Да, спасибо. Вот пра..
Да, спасибо. Вот правильный вариант: 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) Я все проверил, на ответы эта ошибка нигде не повлияла.
|
|
|
|
Отправлено: 19.03.22 17:05. Заголовок: def allDivs( n ): ..
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))
|
|
|
|