 Open in App
Not now

# Find N in the given matrix that follows a pattern

• Difficulty Level : Easy
• Last Updated : 01 Mar, 2022

Given an infinite matrix filled with the natural numbers as shown below:

```1 2 4 7 . . .
3 5 8 . . . .
6 9 . . . . .
10  . . . . .
. . . . . . .```

Also, given an integer N and the task is to find the row and the column of the integer N in the given matrix.
Examples:

```Input: N = 5
Output: 2 2
5 is present in the 2nd row
and the 2nd column.

Input: N = 3
Output: 2 1```

Approach: On observing the problem carefully, the row number can be obtained by subtracting first x natural numbers from N such that they satisfy the condition N – (x * (x + 1)) / 2 ≥ 1 and the resultant value will be the required row number.
To get the corresponding column, add first x natural numbers to 1 such that they satisfy the condition 1 + (y * (y + 1)) / 2 ≤ A. Subtract this resultant value from N to get the gap between the base and the given value and again subtract the gap from y + 1.
Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to return the row and``// the column of the given integer``pair<``int``, ``int``> solve(``int` `n)``{` `    ``int` `low = 1, high = 1e4, x = n, p = 0;` `    ``// Binary search for the row number``    ``while` `(low <= high) {``        ``int` `mid = (low + high) / 2;``        ``int` `sum = (mid * (mid + 1)) / 2;` `        ``// Condition to get the maximum``        ``// x that satisfies the criteria``        ``if` `(x - sum >= 1) {``            ``p = mid;``            ``low = mid + 1;``        ``}``        ``else` `{``            ``high = mid - 1;``        ``}``    ``}` `    ``int` `start = 1, end = 1e4, y = 1, q = 0;` `    ``// Binary search for the column number``    ``while` `(start <= end) {``        ``int` `mid = (start + end) / 2;``        ``int` `sum = (mid * (mid + 1)) / 2;` `        ``// Condition to get the maximum``        ``// y that satisfies the criteria``        ``if` `(y + sum <= n) {``            ``q = mid;``            ``start = mid + 1;``        ``}``        ``else` `{``            ``end = mid - 1;``        ``}``    ``}` `    ``// Get the row and the column number``    ``x = x - (p * (p + 1)) / 2;``    ``y = y + (q * (q + 1)) / 2;``    ``int` `r = x;``    ``int` `c = q + 1 - n + y;` `    ``// Return the pair``    ``pair<``int``, ``int``> ans = { r, c };``    ``return` `ans;``}` `// Driver code``int` `main()``{``    ``int` `n = 5;` `    ``pair<``int``, ``int``> p = solve(n);``    ``cout << p.first << ``" "` `<< p.second;` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``class` `GFG``{``    ` `    ``// Function to return the row and``    ``// the column of the given integer``    ``static` `int``[] solve(``int` `n)``    ``{``        ``int` `low = ``1``, high = (``int``)1e4, x = n, p = ``0``;``    ` `        ``// Binary search for the row number``        ``while` `(low <= high)``        ``{``            ``int` `mid = (low + high) / ``2``;``            ``int` `sum = (mid * (mid + ``1``)) / ``2``;``    ` `            ``// Condition to get the maximum``            ``// x that satisfies the criteria``            ``if` `(x - sum >= ``1``)``            ``{``                ``p = mid;``                ``low = mid + ``1``;``            ``}``            ``else``            ``{``                ``high = mid - ``1``;``            ``}``        ``}``    ` `        ``int` `start = ``1``, end = (``int``)1e4, y = ``1``, q = ``0``;``    ` `        ``// Binary search for the column number``        ``while` `(start <= end)``        ``{``            ``int` `mid = (start + end) / ``2``;``            ``int` `sum = (mid * (mid + ``1``)) / ``2``;``    ` `            ``// Condition to get the maximum``            ``// y that satisfies the criteria``            ``if` `(y + sum <= n)``            ``{``                ``q = mid;``                ``start = mid + ``1``;``            ``}``            ``else``            ``{``                ``end = mid - ``1``;``            ``}``        ``}``    ` `        ``// Get the row and the column number``        ``x = x - (p * (p + ``1``)) / ``2``;``        ``y = y + (q * (q + ``1``)) / ``2``;``        ``int` `r = x;``        ``int` `c = q + ``1` `- n + y;``    ` `        ``// Return the pair``        ``int` `ans[] = { r, c };``        ``return` `ans;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `main (String[] args)``    ``{``        ``int` `n = ``5``;``    ` `        ``int` `[]p = solve(n);``        ``System.out.println(p[``0``] + ``" "` `+ p[``1``]);` `    ``}``}` `// This code is contributed by AnkitRai01`

## Python3

 `# Python3 implementation of the approach` `# Function to return the row and``# the column of the given integer``def` `solve(n):` `    ``low ``=` `1``    ``high ``=` `10``*``*``4``    ``x, p ``=` `n, ``0` `    ``# Binary search for the row number``    ``while` `(low <``=` `high):``        ``mid ``=` `(low ``+` `high) ``/``/` `2``        ``sum` `=` `(mid ``*` `(mid ``+` `1``)) ``/``/` `2` `        ``# Condition to get the maximum``        ``# x that satisfies the criteria``        ``if` `(x ``-` `sum` `>``=` `1``):``            ``p ``=` `mid``            ``low ``=` `mid ``+` `1``        ``else` `:``            ``high ``=` `mid ``-` `1` `    ``start, end, y, q ``=` `1``, ``10``*``*``4``, ``1``, ``0` `    ``# Binary search for the column number``    ``while` `(start <``=` `end):``        ``mid ``=` `(start ``+` `end) ``/``/` `2``        ``sum` `=` `(mid ``*` `(mid ``+` `1``)) ``/``/` `2` `        ``# Condition to get the maximum``        ``# y that satisfies the criteria``        ``if` `(y ``+` `sum` `<``=` `n):``            ``q ``=` `mid``            ``start ``=` `mid ``+` `1``        ``else``:``            ``end ``=` `mid ``-` `1` `    ``# Get the row and the column number``    ``x ``=` `x ``-` `(p ``*` `(p ``+` `1``)) ``/``/` `2``    ``y ``=` `y ``+` `(q ``*` `(q ``+` `1``)) ``/``/` `2``    ``r ``=` `x``    ``c ``=` `q ``+` `1` `-` `n ``+` `y` `    ``# Return the pair``    ``return` `r, c` `# Driver code``n ``=` `5` `r, c ``=` `solve(n)``print``(r, c)` `# This code is contributed by Mohit Kumar`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{``    ` `    ``// Function to return the row and``    ``// the column of the given integer``    ``static` `int``[] solve(``int` `n)``    ``{``        ``int` `low = 1, high = (``int``)1e4, x = n, p = 0;``    ` `        ``// Binary search for the row number``        ``while` `(low <= high)``        ``{``            ``int` `mid = (low + high) / 2;``            ``int` `sum = (mid * (mid + 1)) / 2;``    ` `            ``// Condition to get the maximum``            ``// x that satisfies the criteria``            ``if` `(x - sum >= 1)``            ``{``                ``p = mid;``                ``low = mid + 1;``            ``}``            ``else``            ``{``                ``high = mid - 1;``            ``}``        ``}``    ` `        ``int` `start = 1, end = (``int``)1e4, y = 1, q = 0;``    ` `        ``// Binary search for the column number``        ``while` `(start <= end)``        ``{``            ``int` `mid = (start + end) / 2;``            ``int` `sum = (mid * (mid + 1)) / 2;``    ` `            ``// Condition to get the maximum``            ``// y that satisfies the criteria``            ``if` `(y + sum <= n)``            ``{``                ``q = mid;``                ``start = mid + 1;``            ``}``            ``else``            ``{``                ``end = mid - 1;``            ``}``        ``}``    ` `        ``// Get the row and the column number``        ``x = x - (p * (p + 1)) / 2;``        ``y = y + (q * (q + 1)) / 2;``        ``int` `r = x;``        ``int` `c = q + 1 - n + y;``    ` `        ``// Return the pair``        ``int` `[]ans = {r, c};``        ``return` `ans;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `main (String[] args)``    ``{``        ``int` `n = 5;``    ` `        ``int` `[]p = solve(n);``        ``Console.WriteLine(p + ``" "` `+ p);``    ``}``}` `// This code is contributed by PrinciRaj1992`

## Javascript

 ``

Output:

`2 2`

Time Complexity: O(log(N))

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up