Натуральное число называется совершенным, если оно равно сумме всех своих собственных делителей, т.е. делителей отличных от самого числа. Примером совершенного числа является, например, 6=1+2+3.Напишите программу, позволяющую вычислить, когда наступит следуюций совершенный год.
Совершенные числа имеют вид 2^(p-1)*(2^p-1), где оба множителя простые числа и 2^p-1 - числа Мерсенна.
Для нахождения следующего совершенного числа можно воспользоваться циклом и проверять числа вида 2^(p-1)*(2^p-1), начиная с p=2:
def is_prime(n) if n < 2 return Fals for i in range(2, int(n**0.5) + 1) if n % i == 0 return Fals return Tru def next_perfect_number() p = while True if is_prime(p) and is_prime(2**p - 1) perfect_number = 2**(p-1) * (2**p - 1 yield perfect_numbe p += perfect_numbers = next_perfect_number( for i in range(5): # Печатаем первые 5 совершенных чисе print(next(perfect_numbers))
Этот код выведет первые 5 совершенных чисел. Теперь мы можем использовать эту логику для нахождения более крупных совершенных чисел.
Совершенные числа имеют вид 2^(p-1)*(2^p-1), где оба множителя простые числа и 2^p-1 - числа Мерсенна.
Для нахождения следующего совершенного числа можно воспользоваться циклом и проверять числа вида 2^(p-1)*(2^p-1), начиная с p=2:
def is_prime(n)if n < 2
return Fals
for i in range(2, int(n**0.5) + 1)
if n % i == 0
return Fals
return Tru
def next_perfect_number()
p =
while True
if is_prime(p) and is_prime(2**p - 1)
perfect_number = 2**(p-1) * (2**p - 1
yield perfect_numbe
p +=
perfect_numbers = next_perfect_number(
for i in range(5): # Печатаем первые 5 совершенных чисе
print(next(perfect_numbers))
Этот код выведет первые 5 совершенных чисел. Теперь мы можем использовать эту логику для нахождения более крупных совершенных чисел.