Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:
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
It can be verified that the sum of the numbers on the diagonals is 101.
What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed in the same way?
In [1]:
def foo(n):
total = 1
i = 1
increment = 2
n -= 1
while n > 0:
i += increment
total += i
i += increment
total += i
i += increment
total += i
i += increment
total += i
increment += 2
n -= 2
return total
In [2]:
print foo(1)
print foo(3)
print foo(5)
print foo(7)
print foo(9)
print foo(11)
In [3]:
n = 1001
%timeit foo(n)
foo(n)
Out[3]:
In [4]:
def foo(n):
total = 1
a = -12
b = 4
n -= 1
while n > 0:
a += 32
b += a
total += b
n -= 2
return total
In [5]:
n = 1001
%timeit foo(n)
foo(n)
Out[5]:
In [6]:
def foo(n):
total = 1
i = 1
increment = 2
n -= 1
while n > 0:
total += 4 * i + 10 * increment
i += 4 * increment
increment += 2
n -= 2
return total
In [7]:
n = 1001
%timeit foo(n)
foo(n)
Out[7]: