Home > Programming > Project euler 28: Number spiral diagonals

Project euler 28: Number spiral diagonals


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?


def diag(n):
    sum = 0
    for i in range(0, int(n / 2) + 1): 
            sum += (2 * i + 1) * (2 * i + 1)
            sum += (4 * i * i + 1)
            sum += (2 * i + 1) * (2 * i + 1) - 2 * i
            sum += (2 * i + 1) * (2 * i + 1) - 6 * i 
    return sum - 3
print (diag(1001))

Answer: 669171001
Time complexity: O(4 * n / 2) ~ O(n)
Space complexity: O(1)

Advertisements
Categories: Programming Tags:
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: