Форум сайта python.su
У меня есть программа которая ищет числа с определенным кол вом делителей. Но она работает только если кол во делителей чётно. Как мне изменить(желательно минимально) программу чтобы она искала числа с нечётным кол вом делителей.
from math import sqrt divCount = 2 # нужное количество делителей for n in range(652938, 1744328+1): divs = [] q = round(sqrt(n)) if q*q == n: divs = [q] q -= 1 for d in range(1,q+1): if n % d == 0: divs = divs + [d, n//d] if len(divs) > divCount: break if len(divs) == divCount: print( *sorted(divs) )
Отредактировано fuyukaidesu (Июнь 19, 2021 15:00:30)
Прикреплённый файлы:
номер25 делители.py (448 байт)
Офлайн
from math import sqrt divCount = 2 # нужное количество делителей for n in range(1, 100+1): divs = [] q = round(sqrt(n)) if q*q == n: divs = [q] q -= 1 for d in range(1,q+1): if n % d == 0: divs = divs + [d, n//d] if len(divs) == divCount: break if len(divs) > divCount: print( *sorted(divs) )
Офлайн
AD0DE412Извините возможно я некорректно сформулировал свою мысль. Я имел ввиду что если в divCount указать 5 делителей или другое нечётное кол во делителей программа должна их найти. Вы же изменили так что программа выводит числа у которых больше двух делителей так как в divCount указано 2.
Отредактировано fuyukaidesu (Июнь 19, 2021 22:57:03)
Офлайн
fuyukaidesuне она выводит числа (последнее) с нечетным количеством делителей (ну кроме чисел с одним делителем)
выводит числа у которых больше двух делителей
In [5]: from math import sqrt ...: divCount = 2 # нужное количество делителей ...: for n in range(1, 100+1): ...: divs = [] ...: q = round(sqrt(n)) ...: if q*q == n: ...: divs = [q] ...: q -= 1 ...: for d in range(1,q+1): ...: if n % d == 0: ...: divs = divs + [d, n//d] ...: if len(divs) == divCount: ...: break ...: if len(divs) > divCount or len(divs) == 1: ...: print(sorted(divs)[-1]) ...: ...: 1 4 9 16 25 36 49 64 81 100
In [8]: from math import sqrt ...: divCount = 2 # нужное количество делителей ...: num = 5 ...: for n in range(1, 100+1): ...: divs = [] ...: q = round(sqrt(n)) ...: if q*q == n: ...: divs = [q] ...: q -= 1 ...: for d in range(1,q+1): ...: if n % d == 0: ...: divs = divs + [d, n//d] ...: if len(divs) == divCount: ...: break ...: if len(divs) == num and (len(divs) > divCount or len(divs) == 1): ...: print(sorted(divs)[-1]) ...: ...: ...: ...: ...: 16 81
Отредактировано AD0DE412 (Июнь 21, 2021 09:48:06)
Офлайн