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

• Last Updated : 31 May, 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```

Time Complexity: O(N*N), as we are using nested loops to traverse N*N times.

Auxiliary Space: O(1), as we are not using any extra 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```

Time Complexity: O(N), as we are using a loop to traverse N times.

Auxiliary Space: O(1), as we are not using any extra space.
Please refer complete article on Efficiently compute sums of diagonals of a matrix for more details!

My Personal Notes arrow_drop_up
Related Articles