Maximize size of Subset from Matrix values such that any pair is coprime
Given two integers N and M which denotes a matrix of size N*M that has the value of each cell as the sum of its row number and column number, the task is to find the maximum size of a subset that can be formed using the elements of this matrix such that any pair of the subset will be coprime to each other.
Examples:
Input: N = 3, M = 4
Output: 4
Explanation: There are a maximum of 4 possible numbers on the matrix, Which are: {2, 5, 7, 3}, This makes pairs with the combination itself and has the GCD of that pair equal to one. i, e. (2, 3), (2, 5), (5, 3) . . . The matrix is shown below
Input: N = 5, M = 8
Output: 6
Approach: The problem can be solved based on the following observation
As any pair of the subset will be coprime to each other, therefore the subset will be formed using all the prime within the range [2, N+M].
Follow the steps mentioned below to implement the idea:
- Create a function to check if a number is prime or not.
- Run a loop from i = 2 to N+M.
- Check whether the current number is prime or not.
- If yes then increment the counter variable.
- Last, return the count of primes as the answer.
Below is the Implementation of the above approach.
C++
#include <bits/stdc++.h>
using namespace std;
bool prime( int num)
{
for ( int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false ;
}
}
return true ;
}
int cal( int n, int m)
{
int count = 0;
for ( int i = 2; i <= (n + m); i++) {
if (prime(i)) {
count++;
}
}
return count;
}
int main()
{
int N = 3, M = 4;
cout << cal(N, M);
return 0;
}
|
Java
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG {
public static boolean prime( int num)
{
for ( int i = 2 ; i * i <= num; i++) {
if (num % i == 0 ) {
return false ;
}
}
return true ;
}
public static int cal( int n, int m)
{
int count = 0 ;
for ( int i = 2 ; i <= (n + m); i++) {
if (prime(i)) {
count++;
}
}
return count;
}
public static void main(String[] args)
{
int N = 3 , M = 4 ;
System.out.println(cal(N, M));
}
}
|
Python3
def prime(num):
for i in range ( 2 , int (num * * 0.5 ) + 1 ):
if num % i = = 0 :
return False
return True
def cal(n, m):
count = 0
for i in range ( 2 , n + m + 1 ):
if prime(i):
count + = 1
return count
N = 3
M = 4
print (cal(N, M))
|
C#
using System;
class GFG {
public static bool prime( int num)
{
for ( int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false ;
}
}
return true ;
}
public static int cal( int n, int m)
{
int count = 0;
for ( int i = 2; i <= (n + m); i++) {
if (prime(i)) {
count++;
}
}
return count;
}
static public void Main()
{
int N = 3, M = 4;
Console.Write(cal(N, M));
}
}
|
Javascript
function prime(num)
{
for (let i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false ;
}
}
return true ;
}
function cal(n, m)
{
let count = 0;
for (let i = 2; i <= (n + m); i++) {
if (prime(i)) {
count++;
}
}
return count;
}
let N = 3, M = 4;
document.write(cal(N, M));
|
Time Complexity: O((N+M) * sqrt(N+M))
Auxiliary Space: O(1)
Related Articles:
Last Updated :
10 Jan, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...