Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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



Last Updated : 11 Sep, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads