Наименьшее морское число, как бы вы улучшили код?
Назовём натуральное число хрустальным, если оно представимо в виде произведения двух составных чисел. Обозначим tau(n) количество делителей натурального числа n, включая 1 и само число. Назовём хрустальное число m морским, если tau(m) хрустальное и tau(tau(m)) тоже хрустальное. Вот программа, которая находит наименьшее морское число:
def is_composite(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return True
return False
def tau(n):
count = 0
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
count += 1
if i != n // i:
count += 1
return count
def is_crystal(n):
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
if is_composite(i) and is_composite(n // i):
return True
return False
def find_smallest_sea_crystal():
n = 2
while True:
if is_crystal(n) and is_crystal(tau(n)) and is_crystal(tau(tau(n))):
return n
n += 1
print(find_smallest_sea_crystal())
Вывод программы: 55440.
Как бы вы улучшили этот код, чтобы он занимал меньше места (как в памяти, так и на мониторе), быстрее работал тощо?