Выведение формулы. Фракталы
Сидел дума пытался вывести формулу и использовать алгебраическую прогрессию, получилась какая-то белеберда по тестам не проходит
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 шт):
Кратко поясню. Площадь квадрата изначально 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)
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.