Count entries equal to x in a special matrix
You are given a square matrix (matrix[][]) of order n, where matrix[i][j] = i*j. Find the number of cells which have entry equal to a given number x.
NOte : Indexing of matrix starts from 1, i.e. 1<= i,j <= n.
Examples :
Input : matrix[][] = {1, 2, 3, 4,
2, 4, 6, 8,
3, 6, 9, 12,
4, 8, 12, 16}
x = 4
Output : 3
Input : matrix[][] = {1, 2, 3, 4,
2, 4, 6, 8,
3, 6, 9, 12,
4, 8, 12, 16}
x = 12
Output : 2
A simple approach is to traverse the whole of matrix and check whether cell value is equal to given x and then increase count value accordingly. Time complexity in this approach is quite high and is equal to O(n^2) and space complexity O(1).
// traverse and check whole matrix
for (int i=1; i<=n ; i++)
{
for (int j=1; j<=n; j++)
if (i * j == x)
count++;
}
// return count
return count;
An efficient approach is to only find the number of factors of given x in the range 0 to x and also those factors (including divisor and quotient ) must be less than or equal to n (order of matrix). In this case time complexity will be O(n) and space complexity O(1).
// traverse and find the factors
for (int i=1; i<=n && i<=x ; i++)
{
// x%i == 0 means i is factor of x
// x/i <= n means i and j are <= n (for i*j=x)
if ( x/i <= n && x%i ==0)
count++;
}
// return count
return count;
Implementation:
C++
#include<bits/stdc++.h>
using namespace std;
int count ( int n, int x)
{
int count=0;
for ( int i=1; i<=n && i<=x ; i++)
{
if ( x/i <= n && x%i ==0)
count++;
}
return count;
}
int main()
{
int n = 8;
int x = 24;
cout << count(n, x);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int count ( int n, int x)
{
int count = 0 ;
for ( int i = 1 ; i <= n && i <= x ;
i++)
{
if ( x / i <= n && x % i == 0 )
count++;
}
return count;
}
public static void main(String args[])
{
int n = 8 ;
int x = 24 ;
System.out.println(count(n, x));
}
}
|
Python3
def count(n, x):
cnt = 0
for i in range ( 1 , n + 1 ):
if i < = x:
if x / / i < = n and x % i = = 0 :
cnt + = 1
return cnt
n = 8
x = 24
print (count(n, x))
|
C#
using System;
class GFG {
static int count ( int n, int x) {
int count = 0;
for ( int i = 1; i <= n &&
i <= x ; i++)
{
if ( x / i <= n && x % i == 0)
count++;
}
return count;
}
public static void Main()
{
int n = 8;
int x = 24;
Console.Write(count(n, x));
}
}
|
PHP
<?php
function c_ount ( $n , $x )
{
$Count = 0;
for ( $i = 1; $i <= $n and
$i <= $x ; $i ++)
{
if ( $x / $i <= $n and
$x % $i == 0)
$Count ++;
}
return $Count ;
}
$n = 8;
$x = 24;
echo c_ount( $n , $x );
?>
|
Javascript
<script>
function count (n, x)
{
var count = 0;
for ( var i=1; i<=n && i<=x ; i++)
{
if ( x/i <= n && x%i ==0)
count++;
}
return count;
}
var n = 8;
var x = 24;
document.write( count(n, x));
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(1), since no extra space has been taken.
Last Updated :
12 Dec, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...