Open In App

Count pairs (i,j) such that (i+j) is divisible by A and B both

Improve
Improve
Like Article
Like
Save
Share
Report

Given n, m, A and B. The task is to count the number of pairs of integers (x, y) such that 1 \leq   \leq   n and 1 \leq   \leq   m and (x+y) mod A and (x+y) mod B both equals to 0.


Examples: 

Input: n = 60, m = 90, A = 5, B = 10
Output: 540

Input: 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++

// 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

//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));
 
    }
 
}

                    

Python 3

# 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#

// 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
// 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
?>

                    

Javascript

<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.



Last Updated : 26 Aug, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads