 Open in App
Not now

# Sum of both diagonals of a spiral odd-order square matrix

• Difficulty Level : Easy
• Last Updated : 06 Jul, 2022

We have given a spiral matrix of odd-order, in which we start with the number 1 as center and moving to the right in a clockwise direction.

Examples :

```Input : n = 3
Output : 25
Explanation : spiral matrix =
7 8 9
6 1 2
5 4 3
The sum of diagonals is 7+1+3+9+5 = 25

Input : n = 5
Output : 101
Explanation : spiral matrix of order 5
21 22 23 23 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13
The sum of diagonals is 21+7+1+3+13+
25+9+5+17 = 101```
Recommended Practice

If we take a closer look at the spiral matrix of n x n, we can notice that top right corner element has value n2. Value of top left corner is (n^2) – (n-1) [Why? not that we move ant-clockwise in spiral matrix, therefore we get value of top left after subtracting n-1 from top right]. Similarly values of bottom left corner is (n^2) – 2(n-1) and bottom right corner is (n^2) – 3(n-1). After adding all the four corners we get 4[(n^2)] – 6(n-1).

Let f(n) be sum of diagonal elements for a n x n matrix. Using above observations, we can recursively write f(n) as:

`f(n) = 4[(n^2)] – 6(n-1) + f(n-2)  `

From above relation, we can find the sum of all diagonal elements of a spiral matrix with the help of iterative method.

```spiralDiaSum(n)
{
if (n == 1)
return 1;

// as order should be only odd
// we should pass only odd-integers
return (4*n*n - 6*n + 6 + spiralDiaSum(n-2));
}```

Below is the implementation.

## C++

 `// C++ program to find sum of` `// diagonals of spiral matrix` `#include` `using` `namespace` `std;`   `// function returns sum of diagonals` `int` `spiralDiaSum(``int` `n)` `{` `    ``if` `(n == 1)` `        ``return` `1;`   `    ``// as order should be only odd` `    ``// we should pass only odd-integers` `    ``return` `(4*n*n - 6*n + 6 + spiralDiaSum(n-2));` `}`   `// Driver program` `int` `main()` `{` `    ``int` `n = 7;` `    ``cout <<  spiralDiaSum(n);` `    ``return` `0;` `}`

## Java

 `// Java program to find sum of` `// diagonals of spiral matrix`   `class` `GFG ` `{` `    ``// function returns sum of diagonals` `    ``static` `int` `spiralDiaSum(``int` `n)` `    ``{` `        ``if` `(n == ``1``)` `            ``return` `1``;` `    `  `        ``// as order should be only odd` `        ``// we should pass only odd-integers` `        ``return` `(``4` `* n * n - ``6` `* n + ``6` `+ ` `                     ``spiralDiaSum(n - ``2``));` `    ``}` `    `  `    ``// Driver program to test` `    ``public` `static` `void` `main (String[] args) ` `    ``{` `        ``int` `n = ``7``;` `        ``System.out.print(spiralDiaSum(n));` `    ``}` `}`   `// This code is contributed by Anant Agarwal.`

## Python3

 `# Python3 program to find sum of` `# diagonals of spiral matrix`   `# function returns sum of diagonals` `def` `spiralDiaSum(n):` `    `  `    ``if` `n ``=``=` `1``:` `        ``return` `1`   `    ``# as order should be only odd` `    ``# we should pass only odd` `    ``# integers` `    ``return` `(``4` `*` `n``*``n ``-` `6` `*` `n ``+` `6` `+` `               ``spiralDiaSum(n``-``2``))` `    `  `# Driver program` `n ``=` `7``;` `print``(spiralDiaSum(n))`   `# This code is contributed by Anant Agarwal.`

## C#

 `// C# program to find sum of` `// diagonals of spiral matrix` `using` `System;`   `class` `GFG  {` `    `  `    ``// function returns sum of diagonals` `    ``static` `int` `spiralDiaSum(``int` `n)` `    ``{` `        ``if` `(n == 1)` `            ``return` `1;` `    `  `        ``// as order should be only odd` `        ``// we should pass only odd-integers` `        ``return` `(4 * n * n - 6 * n + 6 + ` `                ``spiralDiaSum(n - 2));` `    ``}` `    `  `    ``// Driver code` `    ``public` `static` `void` `Main (String[] args) ` `    ``{` `        ``int` `n = 7;` `        ``Console.Write(spiralDiaSum(n));` `    ``}` `}`   `// This code is contributed by parashar...`

## PHP

 ``

## Javascript

 ``

Output :

`261`

Time complexity: O(n).
Auxiliary Space: O(n), as implicit stack is created due to recursive call

This article is contributed by Aarti_Rathi and Shivam Pradhan (anuj_charm). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up
Related Articles