Python

Написать программы на питоне

Помогите пожалуйста
M.
Muslim .........
89
1) и 2)
Общая часть: функция поиска делителей. Разбивает число на простые делители и комбинирует их в произведения. Работает быстро для таких чисел, как 8 589 869 056.
 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
БУ
Бекмамат Урустамов
54 053
Лучший ответ
Бекмамат Урустамов В принципе, для (5) пишется за пару минут.
 def power(a, n):
p = a
while n > 1:
p *= p
if n % 2 == 1: p *= a
n //= 2
return p

a, n = map(int, input().split())
print(power(a, n))
Бекмамат Урустамов P.S. Во второй программе добавьте вывод нуля, если совершенных чисел не нашли. Можно по образцу, как сделано в первой.
Бекмамат Урустамов P.P.S. И в поиске делителей переменная maxp не нужна, и возведение в степень 0.5 - тем более. :-) Условие лучше проверять так:
 while p * p							
Muslim ......... Сильно благодарю, однако с заданием «разбить на цифры» есть проблема
Вводишь 123 и выводит 3 2 1, должно 1 2 3
 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 алгоритм медленный
Сергей Ярошинский Ничего, зато мой - быстрый, и поиск совершенных чисел - тоже. :-)
Сергей Ярошинский Делители у меня всё-таки медленные. Попробовал поискать следующее число после 2305843008139952128, удвоив кол-во цифр (установил в качестве верхнего предела где-то 36 нулей или чуть больше...). Программа не смогла факторизовать число за отведённые 10 минут.
 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)
Журнал Удачка len(d) > 1

len(p) > 1