Выведение формулы. Фракталы

введите сюда описание изображения

введите сюда описание изображения Сидел дума пытался вывести формулу и использовать алгебраическую прогрессию, получилась какая-то белеберда по тестам не проходит

def fractal_perimeter_and_area(N, a):
    # Периметр
    perimeter = 6 * a * (1 - (1 / (3 ** (N + 1))))

    # Площадь
    area = a ** 2 * (1 - (4 / 9) * (1 - (1 / (9 ** (N + 1)))) / (5 / 8))

    return perimeter, area


# Чтение входных данных
N = int(input())
a = int(input())

# Вычисление периметра и площади
perimeter, area = fractal_perimeter_and_area(N, a)

# Вывод результатов
print(f"{perimeter:.10f}")
print(f"{area:.10f}")

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

Автор решения: Egor

Кратко поясню. Площадь квадрата изначально a^2, и к нему добавляется 4 квадрата со стороной в 3 раза меньше, т.е. площадью (a/3)^2, каждый последующий уровень имеет 4*3^(n-1) квадратов площадью a^2/3^n

Периметр изначально P0 = 4a. Для каждого добавляемого квадрата внешняя длина 4 * длину стороны, однако от общей S мы отнимаем 2 длины стороны, т.к. удаляем не только 1 сторону нового квадрата, а так же центральный фрагмент предыдущего равной длины. Итого мы добавляем 2 длины стороны. Всего добавляется 43^(n-1) квадратов, поэтому:

Pa = кол-во кв-тов * периметр 1 доб-ого кв-та = 4*3^(n-1)2(a/3^n)

Итого общий периметр:

Pn = P0 + nСумма 8*a/3^k

def square_factorial(N, a):
    if N == 0:
        perimeter = 4 * a
        area = a ** 2
        return perimeter, area
    total_area = a ** 2
    perimeter = 4 * a
    side_length = a / 3
    for level in range(1, N + 1):
        new_squares = 4 * (3 ** (level - 1))
        total_area += new_squares * (side_length ** 2)
        perimeter += new_squares * (4 * side_length - 2 * side_length)

        side_length /= 3
    return perimeter, total_area

N = int(input())
a = int(input())
perimeter, area = square_factorial(N, a)
print(perimeter)
print(area)
→ Ссылка
Автор решения: Stanislav Volodarskiy
n = int(input())
a = int(input())

print(a * (4 + 8 * n / 3))
print(a * a * (1 + 2 / 3 * (1 - 1 / 3 ** n)))
n 0 1 2 3 ... n ...
число новых квадратов 1 4 4·3 4·32 ... 4·3n-1 ...
размер нового квадрата 1 1/3 1/32 1/33 ... 1/3n ...
на сколько вырос периметр 4 (4)·2·(1/3) (4·3)·2·(1/32) (4·32)·2·(1/33) ... (4·3n-1)·2·(1/3n) ...
на сколько выросла площадь 1 (4)·(1/3)2 (4·3)·(1/32)2 (4·32)·(1/33)2 ... (4·3n-1)·(1/3n)2 ...

Периметр pN = 4 + ∑n=1N (4·3n-1)·2·(1/3n) = 4 + ∑n=1N 8/3 = 4 + 8N/3

Площадь sN = 1 + ∑n=1N (4·3n-1)·(1/3n)2 = 1 + 4/3·∑n=1N 1/3n = 1 + 2/3(1 - 1/3n)

Периметр умножается на a, площадь на a2.

→ Ссылка