# Python3 Program to Generate a matrix having sum of secondary diagonal equal to a perfect square

Given an integer **N**, the task is to generate a matrix of dimensions **N x N** using positive integers from the range **[1, N]** such that the sum of the secondary diagonal is a perfect square.

**Examples:**

Input:N = 3Output:

1 2 3

2 3 1

3 2 1Explanation:

The sum of secondary diagonal = 3 + 3 + 3 = 9(= 3^{2}).

Input:N = 7Output:

1 2 3 4 5 6 7

2 3 4 5 6 7 1

3 4 5 6 7 1 2

4 5 6 7 1 2 3

5 6 7 1 2 3 4

6 7 1 2 3 4 5

7 1 2 3 4 5 6Explanation:

The sum of secondary diagonal = 7 + 7 + 7 + 7 + 7 + 7 + 7 = 49(= 7^{2}).

**Approach:** Since the generated matrix needs to be of dimensions **N x N**, therefore, to make the sum of elements in the secondary diagonal a perfect square, the idea is to assign **N** at each index of the secondary diagonal. Therefore, the sum of all **N** elements in this diagonal is **N ^{2}**, which is a perfect square. Follow the steps below to solve the problem:

- Initialize a matrix
**mat[][]**of dimension**N x N**. - Initialize the first row of the matrix as {1 2 3 … N}.
- Now for the remaining rows of the matrix, fill each row by circular left shift of the arrangement of the previous row of the matrix by
**1**. - Print the matrix after completing the above steps.

Below is the implementation of the above approach:

## Python3

`# Python3 program for the above approach` ` ` `# Function to print the matrix whose sum` `# of element in secondary diagonal is a` `# perfect square` `def` `diagonalSumPerfectSquare(arr, N):` ` ` ` ` `# Print the current row` ` ` `print` `(` `*` `arr, sep ` `=` `" "` `)` ` ` ` ` `# Iterate for next N - 1 rows` ` ` `for` `i ` `in` `range` `(N` `-` `1` `):` ` ` ` ` `# Perform left shift by 1` ` ` `arr ` `=` `arr[i::] ` `+` `arr[:i:]` ` ` ` ` `# Print the current row after` ` ` `# the left shift` ` ` `print` `(` `*` `arr, sep ` `=` `" "` `)` ` ` `# Driver Code` ` ` `# Given N` `N ` `=` `7` ` ` `arr ` `=` `[]` ` ` `# Fill the array with elements` `# ranging from 1 to N` `for` `i ` `in` `range` `(` `1` `, N ` `+` `1` `):` ` ` `arr.append(i)` ` ` `# Function Call` `diagonalSumPerfectSquare(arr, N)` |

**Output**

1 2 3 4 5 6 7 2 3 4 5 6 7 1 3 4 5 6 7 1 2 4 5 6 7 1 2 3 5 6 7 1 2 3 4 6 7 1 2 3 4 5 7 1 2 3 4 5 6

**Time Complexity:** O(N^{2})**Auxiliary Space:** O(N)

Please refer complete article on Generate a matrix having sum of secondary diagonal equal to a perfect square for more details!