Given n, m, A and B. The task is to count the number of pairs of integers (x, y) such that 1
Examples:
Input: n = 60, m = 90, A = 5, B = 10
Output: 540Input: n = 225, m = 452, A = 10, B = 15
Output: 3389
Approach: If (x+y) is divisible by both A and B then basically LCM of A and B is the smallest divisor of (x+y). So we calculate all numbers that is less than or equal to m and divisible by LCM of them and when iterating with the loop then we check if the present number is divisible by LCM of A and B.
Below is the implementation of the above approach:
// C++ implementation of above approach #include <bits/stdc++.h> using namespace std;
// Function to find the LCM int find_LCM( int x, int y)
{ return (x * y) / __gcd(x, y);
} // Function to count the pairs int CountPairs( int n, int m, int A, int B)
{ int cnt = 0;
int lcm = find_LCM(A, B);
for ( int i = 1; i <= n; i++)
cnt += (m + (i % lcm)) / lcm;
return cnt;
} // Driver code int main()
{ int n = 60, m = 90, A = 5, B = 10;
cout << CountPairs(n, m, A, B);
return 0;
} |
//Java implementation of above approach import java.util.*;
public class ACE {
static int gcd( int a, int b)
{
return b== 0 ? a :gcd(b,a%b);
}
//Function to find the LCM
static int find_LCM( int x, int y)
{
return (x * y) / gcd(x, y);
}
//Function to count the pairs
static int CountPairs( int n, int m, int A, int B)
{
int cnt = 0 ;
int lcm = find_LCM(A, B);
for ( int i = 1 ; i <= n; i++)
cnt += (m + (i % lcm)) / lcm;
return cnt;
}
//Driver code
public static void main(String[] args) {
int n = 60 , m = 90 , A = 5 , B = 10 ;
System.out.println(CountPairs(n, m, A, B));
}
} |
# Python3 implementation of # above approach # from math lib import gcd method from math import gcd
# Function to find the LCM def find_LCM(x, y) :
return (x * y) / / gcd(x, y)
# Function to count the pairs def CountPairs(n, m, A, B) :
cnt = 0
lcm = find_LCM(A, B)
for i in range ( 1 , n + 1 ) :
cnt + = (m + (i % lcm)) / / lcm
return cnt
# Driver code if __name__ = = "__main__" :
n, m, A, B = 60 , 90 , 5 , 10
print (CountPairs(n, m, A, B))
# This code is contributed # by ANKITRAI1 |
// C# implementation of above approach using System;
class GFG
{ static int gcd( int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
// Function to find the LCM
static int find_LCM( int x, int y)
{
return (x * y) / gcd(x, y);
}
//Function to count the pairs
static int CountPairs( int n, int m,
int A, int B)
{
int cnt = 0;
int lcm = find_LCM(A, B);
for ( int i = 1; i <= n; i++)
cnt += (m + (i % lcm)) / lcm;
return cnt;
}
// Driver code
public static void Main()
{
int n = 60, m = 90, A = 5, B = 10;
Console.WriteLine(CountPairs(n, m, A, B));
}
} // This Code is contributed by mits |
<?php // PHP implementation of above approach function gcd( $a , $b )
{ return $b == 0 ? $a : gcd( $b , $a % $b );
} // Function to find the LCM function find_LCM( $x , $y )
{ return (int)(( $x * $y ) / gcd( $x , $y ));
} // Function to count the pairs function CountPairs( $n , $m , $A , $B )
{ $cnt = 0;
$lcm = find_LCM( $A , $B );
for ( $i = 1; $i <= $n ; $i ++)
$cnt += (int)(( $m + ( $i % $lcm )) /
$lcm );
return $cnt ;
} // Driver code $n = 60; $m = 90; $A = 5; $B = 10;
echo CountPairs( $n , $m , $A , $B );
// This code is contributed // by Akanksha Rai ?> |
<script> //Javascript implementation of above approach function gcd(a,b)
{
return b==0 ? a :gcd(b,a%b);
}
//Function to find the LCM
function find_LCM(x,y)
{
return Math.floor((x * y) / gcd(x, y));
}
//Function to count the pairs
function CountPairs(n,m,A,B)
{
let cnt = 0;
let lcm = find_LCM(A, B);
for (let i = 1; i <= n; i++)
cnt += Math.floor((m + (i % lcm)) / lcm);
return cnt;
}
//Driver code
let n = 60, m = 90, A = 5, B = 10;
document.write(CountPairs(n, m, A, B));
// This code is contributed by rag2127 </script> |
Output:
540
Time Complexity: O(n) for iterating from 1 till n.
Auxiliary Space: O(1) as no extra space is used.