Count the number of rows and columns in given Matrix having all primes
Given a 2D matrix arr[] of size N*M, the task is to find the number of rows and columns having all primes.
Examples:
Input: arr[]= { { 2, 5, 7 }, { 3, 10, 4 }, { 11, 13, 17 } };
Output: 3
Explanation:
2 Rows: {2, 5, 7}, {11, 13, 17}
1 Column: {2, 3, 11}
Input: arr[]={ { 1, 4 }, { 4, 6 } }
Output: 0
Approach: Follow the below steps to solve this problem:
- Apply the Sieve algorithm to find all prime numbers.
- Traverse all elements row-wise to find the number of rows having all primes.
- Apply the above step for all columns.
- Return the answer according to the above observation.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define MAXN 5000
bool prime[MAXN + 1];
void SieveOfEratosthenes( int n)
{
memset (prime, true , sizeof (prime));
for ( int p = 2; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * p; i <= n; i += p) {
prime[i] = false ;
}
}
}
}
int primeRowCol(vector<vector< int > >& arr)
{
int N = arr.size();
int M = arr[0].size();
SieveOfEratosthenes(MAXN);
int cnt = 0;
for ( int i = 0; i < N; i++) {
bool flag = 1;
for ( int j = 0; j < M; ++j) {
if (!prime[arr[i][j]]) {
flag = 0;
break ;
}
}
if (flag) {
cnt += 1;
}
}
for ( int i = 0; i < M; i++) {
bool flag = 1;
for ( int j = 0; j < N; ++j) {
if (!prime[arr[j][i]]) {
flag = 0;
break ;
}
}
if (flag) {
cnt += 1;
}
}
return cnt;
}
int main()
{
vector<vector< int > > arr
= { { 2, 5, 7 }, { 3, 10, 4 }, { 11, 13, 17 } };
cout << primeRowCol(arr);
}
|
Java
class GFG {
static int MAXN = 5000 ;
static boolean [] prime = new boolean [MAXN + 1 ];
static void SieveOfEratosthenes( int n) {
for ( int i = 0 ; i < MAXN; i++) {
prime[i] = true ;
}
for ( int p = 2 ; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * p; i <= n; i += p) {
prime[i] = false ;
}
}
}
}
static int primeRowCol( int [][] arr) {
int N = arr.length;
int M = arr[ 0 ].length;
SieveOfEratosthenes(MAXN);
int cnt = 0 ;
for ( int i = 0 ; i < N; i++) {
boolean flag = true ;
for ( int j = 0 ; j < M; ++j) {
if (!prime[arr[i][j]]) {
flag = false ;
break ;
}
}
if (flag) {
cnt += 1 ;
}
}
for ( int i = 0 ; i < M; i++) {
boolean flag = true ;
for ( int j = 0 ; j < N; ++j) {
if (!prime[arr[j][i]]) {
flag = false ;
break ;
}
}
if (flag) {
cnt += 1 ;
}
}
return cnt;
}
public static void main(String args[]) {
int [][] arr = { { 2 , 5 , 7 }, { 3 , 10 , 4 }, { 11 , 13 , 17 } };
System.out.println(primeRowCol(arr));
}
}
|
Python3
MAXN = 5000
prime = [ True ] * (MAXN + 1 )
def SieveOfEratosthenes(n):
p = 2
while p * p < = n:
if (prime[p] = = True ):
for i in range (p * p, n + 1 , p):
prime[i] = False
p + = 1
def primeRowCol(arr):
N = len (arr)
M = len (arr[ 0 ])
SieveOfEratosthenes(MAXN)
cnt = 0
for i in range (N):
flag = 1
for j in range (M):
if ( not prime[arr[i][j]]):
flag = 0
break
if (flag):
cnt + = 1
for i in range (M):
flag = 1
for j in range (N):
if ( not prime[arr[j][i]]):
flag = 0
break
if (flag):
cnt + = 1
return cnt
if __name__ = = "__main__" :
arr = [[ 2 , 5 , 7 ], [ 3 , 10 , 4 ], [ 11 , 13 , 17 ]]
print (primeRowCol(arr))
|
C#
using System;
class GFG
{
static int MAXN = 5000;
static bool []prime = new bool [MAXN + 1];
static void SieveOfEratosthenes( int n)
{
for ( int i = 0; i < MAXN; i++){
prime[i] = true ;
}
for ( int p = 2; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * p; i <= n; i += p) {
prime[i] = false ;
}
}
}
}
static int primeRowCol( int [,]arr)
{
int N = arr.GetLength(0);
int M = arr.GetLength(1);
SieveOfEratosthenes(MAXN);
int cnt = 0;
for ( int i = 0; i < N; i++) {
bool flag = true ;
for ( int j = 0; j < M; ++j) {
if (!prime[arr[i, j]]) {
flag = false ;
break ;
}
}
if (flag) {
cnt += 1;
}
}
for ( int i = 0; i < M; i++) {
bool flag = true ;
for ( int j = 0; j < N; ++j) {
if (!prime[arr[j, i]]) {
flag = false ;
break ;
}
}
if (flag) {
cnt += 1;
}
}
return cnt;
}
public static void Main()
{
int [,]arr
= { { 2, 5, 7 }, { 3, 10, 4 }, { 11, 13, 17 } };
Console.Write(primeRowCol(arr));
}
}
|
Javascript
<script>
let MAXN = 5000
let prime = new Array(MAXN + 1).fill( true );
function SieveOfEratosthenes(n)
{
for (let p = 2; p * p <= n; p++)
{
if (prime[p] == true ) {
for (let i = p * p; i <= n; i += p) {
prime[i] = false ;
}
}
}
}
function primeRowCol(arr) {
let N = arr.length;
let M = arr[0].length;
SieveOfEratosthenes(MAXN);
let cnt = 0;
for (let i = 0; i < N; i++) {
let flag = 1;
for (let j = 0; j < M; ++j) {
if (!prime[arr[i][j]]) {
flag = 0;
break ;
}
}
if (flag) {
cnt += 1;
}
}
for (let i = 0; i < M; i++) {
let flag = 1;
for (let j = 0; j < N; ++j) {
if (!prime[arr[j][i]]) {
flag = 0;
break ;
}
}
if (flag) {
cnt += 1;
}
}
return cnt;
}
let arr = [[2, 5, 7], [3, 10, 4], [11, 13, 17]];
document.write(primeRowCol(arr));
</script>
|
Time Complexity: O(N*M)
Auxiliary Space: O(MAXN)
Last Updated :
14 Nov, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...