Проект Эйлера

Проект Эйлера. Задача 28 «Диагонали числовой спирали»

Условие:

Если начать с числа 1 и двигаться дальше вправо по часовой стрелке, образуется следующая спираль 5х5:

21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13

Можно убедиться, что сумма чисел в диагоналях равна 101.

Какова сумма чисел в диагоналях спирали 1001 на 1001, образованной таким же способом?

Решение:

# Мы имеем n * n квадрат, где n - нечетное.
# Правый верхний угол равен n * n
# Если идти против часовой стрелки, то верхний левый угол равен n^2 - (n - 1).
# Нижний левый угол равен n^2 - 2(n - 1) и нижний правый равен n^2 - 3(n-1)
# Собрав все это, сумму на внешнем кольце можно выразить формулой 4n^2 - 6(n - 1).
# 
# Между прочим , общая формула для такой задачи(4m^3 + 3m^2 + 8m - 9) / 6, где m - это размер спирали. В нашем случае это 1001

def compute():
 SIZE = 1001  # Must be odd
 ans = 1  # Special case for size 1
 ans += sum(4 * i * i - 6 * (i - 1) for i in range(3, SIZE + 1, 2))
 return str(ans)


if __name__ == "__main__":
 print(compute())

Ruslan

Recent Posts

10 удалённых Python-вакансий

Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…

6 месяцев ago

Где искать Python-вакансии в 2026 году: зачем на Talanto.work появился отдельный сценарий поиска

Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…

6 месяцев ago

Срезы в Python со всеми подробностями

Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…

8 месяцев ago

Возведение в степень в Python: полное руководство

В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…

9 месяцев ago

Как удалить дубликаты из списка Python?

Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…

9 месяцев ago

Виртуальный (shared) хостинг от SpaceWeb: технический обзор

Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…

11 месяцев ago