Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

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

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

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<bits/stdc++.h>
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




<?php
// PHP program to find sum of
// diagonals of spiral matrix
 
// function returns sum
// of diagonals
function 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 Code
$n = 7;
echo spiralDiaSum($n);
 
// This code is contributed by anuj_67.
?>

Javascript




<script>
 
// Javascript program to find sum of
// diagonals of spiral matrix
 
// function returns sum of diagonals
function 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
    let n = 7;
    document.write(spiralDiaSum(n));
 
</script>

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
Last Updated : 06 Jul, 2022
Like Article
Save Article
Similar Reads
Related Tutorials