Project Euler/28: Difference between revisions
From charlesreid1
No edit summary |
|||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
== Spiral Diagonals Sum Analysis == | == Spiral Diagonals Sum Analysis == | ||
This page provides a mathematical analysis and algorithm to compute the sum of numbers on the diagonals of an | This page provides a mathematical analysis and algorithm to compute the sum of numbers on the diagonals of an <math>n \times n</math> spiral grid, starting from 1 at the center and moving clockwise. The problem is to find the sum for a <math>1001 \times 1001</math> spiral, given that the sum for a <math>5 \times 5</math> spiral is 101. | ||
=== Understanding the 5×5 Spiral === | === Understanding the 5×5 Spiral === | ||
Consider the | Consider the <math>5 \times 5</math> spiral provided as an example: | ||
<pre> | <pre> | ||
| Line 20: | Line 20: | ||
The sum of these numbers is: | The sum of these numbers is: | ||
* Main diagonal: | * Main diagonal: <math>21 + 7 + 1 + 3 + 13 = 45</math> | ||
* Anti-diagonal: | * Anti-diagonal: <math>25 + 9 + 1 + 5 + 17 = 57</math> | ||
Total: | Total: <math>45 + 57 = 102</math>. Since the center (1) is counted twice, subtract it once: <math>102 - 1 = 101</math>, which matches the given sum. | ||
=== Analyzing the Spiral Pattern === | === Analyzing the Spiral Pattern === | ||
The spiral starts at 1 in the center and moves outward in layers, clockwise. For a | The spiral starts at 1 in the center and moves outward in layers, clockwise. For a <math>5 \times 5</math> grid: | ||
* '''Layer 0''': Center (1). | * '''Layer 0''': Center (1). | ||
* '''Layer 1''': | * '''Layer 1''': <math>3 \times 3</math> grid (numbers 2 to 9). | ||
* '''Layer 2''': | * '''Layer 2''': <math>5 \times 5</math> grid (numbers 10 to 25). | ||
For an | For an <math>n \times n</math> grid where <math>n</math> is odd (<math>n = 2k + 1</math>), the number of layers <math>k</math> is: | ||
* | * <math>n = 5</math>, so <math>5 = 2k + 1</math>, <math>k = 2</math>. | ||
* | * <math>n = 1001</math>, so <math>1001 = 2k + 1</math>, <math>k = 500</math>. | ||
Each layer | Each layer <math>m</math> forms a square of side length <math>2m + 1</math>. The numbers on the diagonals are the corners of these layers. | ||
==== Number of Elements per Layer ==== | ==== Number of Elements per Layer ==== | ||
* Layer 0: 1 number. | * Layer 0: 1 number. | ||
* Layer 1: | * Layer 1: <math>3 \times 3 = 9</math> numbers, minus the center, so 8 numbers. | ||
* Layer 2: | * Layer 2: <math>5 \times 5 = 25</math> numbers, minus the inner <math>3 \times 3</math> (9 numbers), so <math>25 - 9 = 16</math> numbers. | ||
For layer | For layer <math>m</math>, the side length is <math>2m + 1</math>, so the grid has <math>(2m + 1)^2</math> numbers. The inner grid (layer <math>m-1</math>) has <math>(2m - 1)^2</math> numbers. The numbers in layer <math>m</math>: | ||
<math>(2m + 1)^2 - (2m - 1)^2 = (4m^2 + 4m + 1) - (4m^2 - 4m + 1) = 8m</math> | <math>(2m + 1)^2 - (2m - 1)^2 = (4m^2 + 4m + 1) - (4m^2 - 4m + 1) = 8m</math> | ||
Total numbers up to layer | Total numbers up to layer <math>m</math>: | ||
<math>1 + \sum_{i=1}^m 8i = 1 + 8 \cdot \frac{m(m+1)}{2} = 1 + 4m(m+1)</math> | <math>1 + \sum_{i=1}^m 8i = 1 + 8 \cdot \frac{m(m+1)}{2} = 1 + 4m(m+1)</math> | ||
The last number in layer | The last number in layer <math>m</math> (top-right corner) is <math>(2m + 1)^2</math>. | ||
==== Corner Numbers on Diagonals ==== | ==== Corner Numbers on Diagonals ==== | ||
For layer | For layer <math>m</math>, the corners are: | ||
* Top-right: | * Top-right: <math>(2m + 1)^2</math> | ||
* Top-left: | * Top-left: <math>(2m + 1)^2 - 2m</math> | ||
* Bottom-left: | * Bottom-left: <math>(2m + 1)^2 - 4m</math> | ||
* Bottom-right: | * Bottom-right: <math>(2m + 1)^2 - 6m</math> | ||
Verify for | Verify for <math>5 \times 5</math> (<math>k = 2</math>): | ||
* Layer 1 ( | * Layer 1 (<math>m = 1</math>): | ||
** Top-right: <math>(2 \times 1 + 1)^2 = 9</math> | |||
** Top-left: <math>9 - 2 \times 1 = 7</math> | |||
** Bottom-left: <math>9 - 4 \times 1 = 5</math> | |||
** Bottom-right: <math>9 - 6 \times 1 = 3</math> | |||
* Layer 2 ( | * Layer 2 (<math>m = 2</math>): | ||
** Top-right: <math>(2 \times 2 + 1)^2 = 25</math> | |||
** Top-left: <math>25 - 2 \times 2 = 21</math> | |||
** Bottom-left: <math>25 - 4 \times 2 = 17</math> | |||
** Bottom-right: <math>25 - 6 \times 2 = 13</math> | |||
These match the grid. | These match the grid. | ||
| Line 78: | Line 78: | ||
=== Sum of Diagonals for 1001×1001 Spiral === | === Sum of Diagonals for 1001×1001 Spiral === | ||
For | For <math>n = 1001</math>, <math>k = 500</math>. Sum the corners from layer 1 to 500, plus the center (1). | ||
Sum of corners in layer | Sum of corners in layer <math>m</math>: | ||
<math>4(2m + 1)^2 - (2m + 4m + 6m) = 16m^2 + 4m + 4</math> | <math>4(2m + 1)^2 - (2m + 4m + 6m) = 16m^2 + 4m + 4</math> | ||
| Line 93: | Line 93: | ||
* <math>\sum_{m=1}^n 1 = n</math> | * <math>\sum_{m=1}^n 1 = n</math> | ||
For | For <math>n = 500</math>: | ||
* <math>\sum_{m=1}^{500} m^2 = \frac{500 \cdot 501 \cdot 1001}{6} = 41791750</math> | * <math>\sum_{m=1}^{500} m^2 = \frac{500 \cdot 501 \cdot 1001}{6} = 41791750</math> | ||
* <math>\sum_{m=1}^{500} m = \frac{500 \cdot 501}{2} = 125250</math> | * <math>\sum_{m=1}^{500} m = \frac{500 \cdot 501}{2} = 125250</math> | ||
| Line 102: | Line 102: | ||
<math>16 \cdot 41791750 + 4 \cdot 125250 + 4 \cdot 500 = 669171000</math> | <math>16 \cdot 41791750 + 4 \cdot 125250 + 4 \cdot 500 = 669171000</math> | ||
Add the center: | Add the center: <math>669171000 + 1 = \mbox{the final answer}</math>. | ||
=== Algorithm to Compute the Sum === | === Algorithm to Compute the Sum === | ||
| Line 125: | Line 125: | ||
=== Final Answer === | === Final Answer === | ||
The sum of the numbers on the diagonals of a | The sum of the numbers on the diagonals of a <math>1001 \times 1001</math> spiral is | ||
<!-- | <!-- | ||
Latest revision as of 00:45, 19 April 2025
Spiral Diagonals Sum Analysis
This page provides a mathematical analysis and algorithm to compute the sum of numbers on the diagonals of an $ n \times n $ spiral grid, starting from 1 at the center and moving clockwise. The problem is to find the sum for a $ 1001 \times 1001 $ spiral, given that the sum for a $ 5 \times 5 $ spiral is 101.
Understanding the 5×5 Spiral
Consider the $ 5 \times 5 $ spiral provided as an example:
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
The diagonals are:
- Main diagonal (top-left to bottom-right): 21, 7, 1, 3, 13.
- Anti-diagonal (top-right to bottom-left): 25, 9, 1, 5, 17.
The sum of these numbers is:
- Main diagonal: $ 21 + 7 + 1 + 3 + 13 = 45 $
- Anti-diagonal: $ 25 + 9 + 1 + 5 + 17 = 57 $
Total: $ 45 + 57 = 102 $. Since the center (1) is counted twice, subtract it once: $ 102 - 1 = 101 $, which matches the given sum.
Analyzing the Spiral Pattern
The spiral starts at 1 in the center and moves outward in layers, clockwise. For a $ 5 \times 5 $ grid:
- Layer 0: Center (1).
- Layer 1: $ 3 \times 3 $ grid (numbers 2 to 9).
- Layer 2: $ 5 \times 5 $ grid (numbers 10 to 25).
For an $ n \times n $ grid where $ n $ is odd ($ n = 2k + 1 $), the number of layers $ k $ is:
- $ n = 5 $, so $ 5 = 2k + 1 $, $ k = 2 $.
- $ n = 1001 $, so $ 1001 = 2k + 1 $, $ k = 500 $.
Each layer $ m $ forms a square of side length $ 2m + 1 $. The numbers on the diagonals are the corners of these layers.
Number of Elements per Layer
- Layer 0: 1 number.
- Layer 1: $ 3 \times 3 = 9 $ numbers, minus the center, so 8 numbers.
- Layer 2: $ 5 \times 5 = 25 $ numbers, minus the inner $ 3 \times 3 $ (9 numbers), so $ 25 - 9 = 16 $ numbers.
For layer $ m $, the side length is $ 2m + 1 $, so the grid has $ (2m + 1)^2 $ numbers. The inner grid (layer $ m-1 $) has $ (2m - 1)^2 $ numbers. The numbers in layer $ m $:
$ (2m + 1)^2 - (2m - 1)^2 = (4m^2 + 4m + 1) - (4m^2 - 4m + 1) = 8m $
Total numbers up to layer $ m $:
$ 1 + \sum_{i=1}^m 8i = 1 + 8 \cdot \frac{m(m+1)}{2} = 1 + 4m(m+1) $
The last number in layer $ m $ (top-right corner) is $ (2m + 1)^2 $.
Corner Numbers on Diagonals
For layer $ m $, the corners are:
- Top-right: $ (2m + 1)^2 $
- Top-left: $ (2m + 1)^2 - 2m $
- Bottom-left: $ (2m + 1)^2 - 4m $
- Bottom-right: $ (2m + 1)^2 - 6m $
Verify for $ 5 \times 5 $ ($ k = 2 $):
- Layer 1 ($ m = 1 $):
- Top-right: $ (2 \times 1 + 1)^2 = 9 $
- Top-left: $ 9 - 2 \times 1 = 7 $
- Bottom-left: $ 9 - 4 \times 1 = 5 $
- Bottom-right: $ 9 - 6 \times 1 = 3 $
- Layer 2 ($ m = 2 $):
- Top-right: $ (2 \times 2 + 1)^2 = 25 $
- Top-left: $ 25 - 2 \times 2 = 21 $
- Bottom-left: $ 25 - 4 \times 2 = 17 $
- Bottom-right: $ 25 - 6 \times 2 = 13 $
These match the grid.
Sum of Diagonals for 1001×1001 Spiral
For $ n = 1001 $, $ k = 500 $. Sum the corners from layer 1 to 500, plus the center (1).
Sum of corners in layer $ m $:
$ 4(2m + 1)^2 - (2m + 4m + 6m) = 16m^2 + 4m + 4 $
Total sum from layer 1 to 500:
$ \sum_{m=1}^{500} (16m^2 + 4m + 4) = 16 \sum_{m=1}^{500} m^2 + 4 \sum_{m=1}^{500} m + 4 \sum_{m=1}^{500} 1 $
Using:
- $ \sum_{m=1}^n m^2 = \frac{n(n+1)(2n+1)}{6} $
- $ \sum_{m=1}^n m = \frac{n(n+1)}{2} $
- $ \sum_{m=1}^n 1 = n $
For $ n = 500 $:
- $ \sum_{m=1}^{500} m^2 = \frac{500 \cdot 501 \cdot 1001}{6} = 41791750 $
- $ \sum_{m=1}^{500} m = \frac{500 \cdot 501}{2} = 125250 $
- $ \sum_{m=1}^{500} 1 = 500 $
Total:
$ 16 \cdot 41791750 + 4 \cdot 125250 + 4 \cdot 500 = 669171000 $
Add the center: $ 669171000 + 1 = \mbox{the final answer} $.
Algorithm to Compute the Sum
Below is a pseudocode algorithm to compute the sum efficiently:
function sumDiagonals(n):
k = (n - 1) / 2
sum = 1 # Center
for m from 1 to k:
sum += 16 * m * m + 4 * m + 4
return sum
n = 1001
result = sumDiagonals(n)
print(result)
This algorithm avoids generating the entire spiral, focusing on the diagonal numbers.
Final Answer
The sum of the numbers on the diagonals of a $ 1001 \times 1001 $ spiral is
Flags