Условие:
Если начать с числа 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())