# Python Program to Efficiently compute sums of diagonals of a matrix

• Last Updated : 11 Jan, 2022

Given a 2D square matrix, find the sum of elements in Principal and Secondary diagonals. For example, consider the following 4 X 4 input matrix.

```A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
A30 A31 A32 A33```

The primary diagonal is formed by the elements A00, A11, A22, A33.

1. Condition for Principal Diagonal: The row-column condition is row = column.
The secondary diagonal is formed by the elements A03, A12, A21, A30.
2. Condition for Secondary Diagonal: The row-column condition is row = numberOfRows – column -1.

Examples :

```Input :
4
1 2 3 4
4 3 2 1
7 8 9 6
6 5 4 3
Output :
Principal Diagonal: 16
Secondary Diagonal: 20

Input :
3
1 1 1
1 1 1
1 1 1
Output :
Principal Diagonal: 3
Secondary Diagonal: 3```

Method 1 (O(n ^ 2) :

In this method, we use two loops i.e. a loop for columns and a loop for rows and in the inner loop we check for the condition stated above:

## Python3

 `# A simple Python program to ``# find sum of diagonals``MAX` `=` `100`` ` `def` `printDiagonalSums(mat, n):`` ` `    ``principal ``=` `0``    ``secondary ``=` `0``;``    ``for` `i ``in` `range``(``0``, n): ``        ``for` `j ``in` `range``(``0``, n): `` ` `            ``# Condition for principal diagonal``            ``if` `(i ``=``=` `j):``                ``principal ``+``=` `mat[i][j]`` ` `            ``# Condition for secondary diagonal``            ``if` `((i ``+` `j) ``=``=` `(n ``-` `1``)):``                ``secondary ``+``=` `mat[i][j]``         ` `    ``print``(``"Principal Diagonal:"``, principal)``    ``print``(``"Secondary Diagonal:"``, secondary)`` ` `# Driver code``a ``=` `[[ ``1``, ``2``, ``3``, ``4` `],``     ``[ ``5``, ``6``, ``7``, ``8` `], ``     ``[ ``1``, ``2``, ``3``, ``4` `],``      ``[ ``5``, ``6``, ``7``, ``8` `]]``printDiagonalSums(a, ``4``)`` ` `# This code is contributed ``# by ihritik`

Output:

```Principal Diagonal:18
Secondary Diagonal:18```

This code takes O(n^2) time and O(1) auxiliary space

Method 2 (O(n) :

In this method we use one loop i.e. a loop for calculating sum of both the principal and secondary diagonals:

## Python3

 `# A simple Python3 program to find``# sum of diagonals``MAX` `=` `100`` ` `def` `printDiagonalSums(mat, n):`` ` `    ``principal ``=` `0``    ``secondary ``=` `0``    ``for` `i ``in` `range``(``0``, n): ``        ``principal ``+``=` `mat[i][i]``        ``secondary ``+``=` `mat[i][n ``-` `i ``-` `1``]``         ` `    ``print``(``"Principal Diagonal:"``, principal)``    ``print``(``"Secondary Diagonal:"``, secondary)`` ` `# Driver code``a ``=` `[[ ``1``, ``2``, ``3``, ``4` `],``     ``[ ``5``, ``6``, ``7``, ``8` `], ``     ``[ ``1``, ``2``, ``3``, ``4` `],``     ``[ ``5``, ``6``, ``7``, ``8` `]]``printDiagonalSums(a, ``4``)`` ` `# This code is contributed``# by ihritik`

Output :

```Principal Diagonal:18
Secondary Diagonal:18```

This code takes O(n) time and O(1) auxiliary space
Please refer complete article on Efficiently compute sums of diagonals of a matrix for more details!

My Personal Notes arrow_drop_up