Skip to content
Related Articles

Related Articles

Generate a matrix having sum of secondary diagonal equal to a perfect square
  • Difficulty Level : Basic
  • Last Updated : 06 May, 2021

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 = 3
Output:
1 2 3
2 3 1
3 2 1
Explanation:
The sum of secondary diagonal = 3 + 3 + 3 = 9(= 32).

Input: N = 7
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
Explanation:
The sum of secondary diagonal = 7 + 7 + 7 + 7 + 7 + 7 + 7 = 49(= 72).

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 N2, which is a perfect square. Follow the steps below to solve the problem:



  1. Initialize a matrix mat[][] of dimension N x N.
  2. Initialize the first row of the matrix as {1 2 3 … N}.
  3. 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.
  4. Print the matrix after completing the above steps.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to print the matrix whose sum
// of element in secondary diagonal is a
// perfect square
void diagonalSumPerfectSquare(int arr[], int N)
{
     
    // Iterate for next N - 1 rows
    for(int i = 0; i < N; i++)
    {
         
        // Print the current row after
        // the left shift
        for(int j = 0; j < N; j++)
        {
            cout << (arr[(j + i) % 7]) << " ";
        }
        cout << endl;
    }
}
 
// Driver Code
int main()
{
     
    // Given N
    int N = 7;
 
    int arr[N];
 
    // Fill the array with elements
    // ranging from 1 to N
    for(int i = 0; i < N; i++)
    {
        arr[i] = i + 1;
    }
 
    // Function Call
    diagonalSumPerfectSquare(arr, N);
}
 
// This code is contributed by gauravrajput1

Java




// Java program for the above approach
class GFG {
 
    // Function to print the matrix whose sum
    // of element in secondary diagonal is a
    // perfect square
    static void diagonalSumPerfectSquare(int[] arr,
                                         int N)
    {
 
        // Iterate for next N - 1 rows
        for (int i = 0; i < N; i++)
        {
 
            // Print the current row after
            // the left shift
            for (int j = 0; j < N; j++)
            {
                System.out.print(arr[(j + i) % 7] + " ");
            }
            System.out.println();
        }
    }
 
    // Driver Code
    public static void main(String[] srgs)
    {
 
        // Given N
        int N = 7;
 
        int[] arr = new int[N];
 
        // Fill the array with elements
        // ranging from 1 to N
        for (int i = 0; i < N; i++)
        {
            arr[i] = i + 1;
        }
 
        // Function Call
        diagonalSumPerfectSquare(arr, N);
    }
}
 
// This code is contributed by Amit Katiyar

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)

C#




// C# program for the
// above approach
using System;
class GFG {
 
    // Function to print the matrix whose sum
    // of element in secondary diagonal is a
    // perfect square
    static void diagonalSumPerfectSquare(int[] arr,
                                         int N)
    {
        // Iterate for next N - 1 rows
        for (int i = 0; i < N; i++)
        {
            // Print the current row after
            // the left shift
            for (int j = 0; j < N; j++)
            {
                Console.Write(arr[(j + i) % 7] + " ");
            }
            Console.WriteLine();
        }
    }
 
    // Driver Code
    public static void Main(String[] srgs)
    {
        // Given N
        int N = 7;
 
        int[] arr = new int[N];
 
        // Fill the array with elements
        // ranging from 1 to N
        for (int i = 0; i < N; i++) {
            arr[i] = i + 1;
        }
 
        // Function Call
        diagonalSumPerfectSquare(arr, N);
    }
}
 
// This code is contributed by 29AjayKumar

Javascript




<script>
 
// Javascript program to implement
// the above approach
   
   // Function to prlet the matrix whose sum
    // of element in secondary diagonal is a
    // perfect square
    function diagonalSumPerfectSquare( arr,N)
    {
  
        // Iterate for next N - 1 rows
        for (let i = 0; i < N; i++)
        {
  
            // Prlet the current row after
            // the left shift
            for (let j = 0; j < N; j++)
            {
                document.write(arr[(j + i) % 7] + " ");
            }
            document.write("<br/>");
        }
    }
 
 
// Driver Code
 
        // Given N
        let N = 7;
  
        let arr = new Array(N).fill(0);
  
        // Fill the array with elements
        // ranging from 1 to N
        for (let i = 0; i < N; i++)
        {
            arr[i] = i + 1;
        }
  
        // Function Call
        diagonalSumPerfectSquare(arr, N);
  
 // This code is contributed by avijitmondal1998.
</script>
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(N2)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :