Find the number of cells in the table contains X
Given two integer N and X. N represents the number of rows and columns of a table. And the element at the ith row and the jth column in the table is i*j. The task is to find the number of cells in the table that contains X.
Examples:
Input : N = 6, X = 12
Output : 4
Cells {2, 6}, {3, 4}, {4, 3}, {6, 2} contains the number 12
Input : N = 5, X = 11
Output : 0
Approach:
It’s easy to see that number x can appear only once in a row. If x contains in the ith row then the column number will be x/i. x contains in the ith row if x is divisible by i. let’s check that x divides i and x/i <= n. If these conditions met then update the answer.
Below is the implementation of the above approach :
C++
#include <bits/stdc++.h>
using namespace std;
int Cells( int n, int x)
{
int ans = 0;
for ( int i = 1; i <= n; i++)
if (x % i == 0 && x / i <= n)
ans++;
return ans;
}
int main()
{
int n = 6, x = 12;
cout << Cells(n, x);
return 0;
}
|
Java
class GFG
{
public static int Cells( int n, int x)
{
int ans = 0 ;
for ( int i = 1 ; i <= n; i++)
if (x % i == 0 && x / i <= n)
ans++;
return ans;
}
public static void main(String[] args)
{
int n = 6 , x = 12 ;
System.out.println(Cells(n, x));
}
}
|
Python3
def Cells(n, x):
ans = 0 ;
for i in range ( 1 , n + 1 ):
if (x % i = = 0 and x / i < = n):
ans + = 1 ;
return ans;
if __name__ = = '__main__' :
n = 6 ; x = 12 ;
print (Cells(n, x));
|
C#
using System;
class GFG
{
static int Cells( int n, int x)
{
int ans = 0;
for ( int i = 1; i <= n; i++)
if (x % i == 0 && x / i <= n)
ans++;
return ans;
}
public static void Main()
{
int n = 6, x = 12;
Console.WriteLine(Cells(n,x));
}
}
|
Javascript
<script>
function Cells(n, x)
{
let ans = 0;
for (let i = 1; i <= n; i++)
if (x % i == 0 && parseInt(x / i) <= n)
ans++;
return ans;
}
let n = 6, x = 12;
document.write(Cells(n, x));
</script>
|
Time Complexity: O(n), since there runs a loop for once from 1 to n.
Auxiliary Space: O(1), since no extra space has been taken.
Approach:
Ignore the cases with negative squares. If n is 0, there won’t be any numbers in the square and if x is 0 it won’t appear in a square, so return 0 in both cases. If x is greater than n^2, it won’t be in the square, so return 0 in that case as well.
Next, loop through all numbers i from 1 to the square root of x, If i is a factor of x and x/i <= n, there are at least two additional places x is on the n-squared chart, due to the associative property: i*(x/i) and (x/i)*i, e.g., if x is 12 and i is 3: 3*4 and 4*3.
Lastly, find out if the square root of x is whole. If it is, it appears one additional time on the diagonal of the n-square table, which is the list of all squares.
| 1 | 2 | 3 | 4 | 5 | 6 |
| 2 | 4 | 6 | 8 | 10 | 12 |
| 3 | 6 | 9 | 12 | 15 | 18 |
| 4 | 8 | 12 | 16 | 20 | 24 |
| 5 | 10 | 15 | 20 | 25 | 30 |
| 6 | 12 | 18 | 24 | 30 | 36 |
Below is the implementation of the above approach :
C++
#include <bits/stdc++.h>
using namespace std;
int Cells( int n, int x)
{
if (n <= 0 || x <= 0 || x > n * n)
return 0;
int i = 0, count = 0;
while (++i * i < x)
if (x % i == 0 && x <= n * i)
count += 2;
return i * i == x ? count + 1 : count;
}
int main()
{
int n = 6, x = 12;
cout << (Cells(n, x));
return 0;
}
|
Java
class GFG {
public static int Cells( int n, int x)
{
if (n <= 0 || x <= 0 || x > n * n)
return 0 ;
int i = 0 , count = 0 ;
while (++i * i < x)
if (x % i == 0 && x <= n * i)
count += 2 ;
return i * i == x ? count + 1 : count;
}
public static void main(String[] args)
{
int n = 6 , x = 12 ;
System.out.println(Cells(n, x));
}
}
|
Python3
def Cells(n, x):
if (n < = 0 or x < = 0 or x > n * n):
return 0 ;
i = 1
count = 0
while (i * i < x):
if (x % i = = 0 and x < = n * i):
count + = 2 ;
i + = 1
if (i * i = = x):
return count + 1
else :
return count
n = 6
x = 12
print (Cells(n, x))
|
C#
using System;
class GFG{
public static int Cells( int n, int x)
{
if (n <= 0 || x <= 0 || x > n * n)
return 0;
int i = 0, count = 0;
while (++i * i < x)
if (x % i == 0 && x <= n * i)
count += 2;
return i * i == x ? count + 1 : count;
}
static public void Main ()
{
int n = 6, x = 12;
Console.WriteLine(Cells(n, x));
}
}
|
Javascript
<script>
function Cells(n, x)
{
if (n <= 0 || x <= 0 || x > n * n)
return 0;
var i = 0, count = 0;
while (++i * i < x)
if (x % i == 0 && x <= n * i)
count += 2;
return i * i == x ? count + 1 : count;
}
var n = 6, x = 12;
document.write(Cells(n, x));
</script>
|
Time Complexity: O(sqrt(x)), since there runs a loop for once from 1 to n1/2.
Auxiliary Space: O(1), since no extra space has been taken.
Last Updated :
28 May, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...