Где-то вы что-то неправильно истолковываете. Как вы печатаете, какой тип номера, столько раз, сколько значение числа. Возможно, я что-то пропустил, но все равно.
Сумма делителей можно найти наивности путем использования по модулю
def classify1(num):
div_sum = sum(x for x in range(1, num) if num % x == 0)
kind = ""
if div_sum < num:
kind = "deficient"
elif div_sum > num:
kind = "abundant"
else:
kind = "perfect"
print("{} is a {} number".format(num, kind))
но для больших чисел или, может быть, номера это займет много времени. Поэтому я приветствую вас в функции делителя. Я просто сбрасываю его и объясняю.
def mark(li: list, x: int):
for i in range(2*x, len(li), x):
li[i] = False
return li
def sieve(lim: int):
li = [True] * lim
li[0] = li[1] = 0
for x in range(2, int(lim ** 0.5) + 1):
if x:
li = mark(li, x)
return [2]+[x for x in range(3, lim, 2) if li[x]]
def factor(num):
divs = list()
for prime in primes:
if prime * prime > num:
if num > 1:
divs += [num]
return divs
while num % prime == 0:
num //= prime
divs += [prime]
else:
return divs
def divisors_sum(num):
"""
Function that implements a geometric series to generate the sum of the
divisors, but it is not the divisor function since removing original
number.
"""
divs = factor(num)
div_sum, s = 1, 0
for div in set(divs):
s = 0
for exponent in range(0, divs.count(div) + 1):
s += div ** exponent
div_sum *= s
else:
return div_sum - num
primes = sieve(limit)
но .. там не так много объяснить, из-за первый основной фактор числа, а также использовать функцию делителя, чтобы получить надлежащие делители суммы. Вот и все. Однако ускорение происходит довольно быстро. Возможно, это может привести к смерти, но это гораздо более круче и быстрее.
Пожалуйста, будьте более конкретными в отношении вашей проблемы на самом деле – agg3l
Я понимаю проблему, но не вашу реализацию или откуда она исходит, не могли бы вы немного объяснить свой код? – Simon
i и j являются факторами числа, если i * j == numb. Тогда и только тогда факторы добавляются к сумме. Когда цикл for завершает, он сравнивает сумму с онемением, чтобы определить, является ли онемение обильным, недостаточным или совершенным. https://en.wikipedia.org/wiki/Abundant_number#Related_concepts – dvdktn