Наименьшее морское число, как бы вы улучшили код?

Назовём натуральное число хрустальным, если оно представимо в виде произведения двух составных чисел. Обозначим 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.

Как бы вы улучшили этот код, чтобы он занимал меньше места (как в памяти, так и на мониторе), быстрее работал тощо?


Ответы (0 шт):