




def divisors(m): # ищем простые делители и комбинируем их произведения
n = m
factors = {1}
maxp = int(n ** 0.5)
p, inc = 2, 1
while p 1:
factors.update([f * n for f in factors])
factors.remove(m)
return sorted(factors)
К общей части добавить код для 1) m = int(input())
ds = divisors(m)
print(*ds if sum(ds) == m else [0])
Код для 2) N = int(input())
print(*(m for m in range(1, N + 1) if sum(divisors(m)) == m))
А лучше для 2) добавить это (можно хоть квинтиллионы вводить, отработает за миллисекунды): def log2bound(N):
x, p = 0, 1
while p < N: x, p = x + 1, p
n,res = int(input()),[]
for i in range(1,n - 1):
if not n % i: res += [i]
p = '' if sum(res) == n else 'не'
print('Число', n, p, 'совершенное' )
# разумеется для таких совершенных чисел как 33 550 336, 8 589 869 056 алгоритм медленный
N = int(input())
d = []
for i in range(1, N):
if N % i == 0:
d.append(i)
if len(d) > 0:
print(*d)
else:
print(0)
N = int(input())
p = []
for i in range(1, N+1):
s = 0
for j in range(1, i):
if i % j == 0:
s += j
if s == i:
p.append(i)
if len(p) > 0:
print(*p)
else:
print(0)
N = int(input())
while N > 0:
print(N % 10, end=" ")
N //= 10
N = int(input())
a, b = 1, 1
for i in range(N):
print(a, end=" ")
a, b = b, a + b
A, N = map(int, input().split())
print(A**N)
Вводишь 123 и выводит 3 2 1, должно 1 2 3