Given three non-negative integers A, B, and C, the task is to count the numbers in the range [1, C] that can be reduced to 0 by adding or subtracting A or B.
Examples:
Input: A = 2, B = 4, C = 7
Output: 3
Explanation: The numbers from the range [1, 7] that can be reduced to 0 by given operations are:
- For element 2: The number can be modified as 2 – 2 = 0.
- For element 4: The number can be modified as 4 – 2 – 2 = 0.
- For element 6: The number can be modified as 6 – 4 – 2 = 0.
Therefore, the total count is 3.
Input: A = 2, B = 3, C = 5
Output: 5
Approach: The given problem can be solved based on the following observations:
- Consider X and Y number of addition or subtraction of A and B are performed respectively.
- After applying the operations on any number N, it becomes Ax + By. Therefore, by Extended Euclidean Algorithm, it can be said that there exist integer coefficients x and y such that Ax + By = GCD(A, B).
- Therefore, N must be a multiple of GCD(A, B), say G. Now the problem is reduced to finding the number of multiples of G which are in the range [1, C] which is floor (C / G).
Follow the below steps to solve the problem:
- Find the GCD of A and B and store it in a variable, say G.
- Now, the count of numbers over the range [1, C] is the multiples of G having values at most C which is given by floor(C/G).
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
long long gcd( long long a, long long b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
void countDistinctNumbers( long long A,
long long B,
long long C)
{
long long g = gcd(A, B);
long long count = C / g;
cout << count;
}
int main()
{
long long A = 2, B = 3, C = 5;
countDistinctNumbers(A, B, C);
return 0;
}
|
Java
class GFG{
static long gcd( long a, long b)
{
if (b == 0 )
return a;
return gcd(b, a % b);
}
static void countDistinctNumbers( long A, long B,
long C)
{
long g = gcd(A, B);
long count = C / g;
System.out.println(count);
}
public static void main(String[] args)
{
long A = 2 , B = 3 , C = 5 ;
countDistinctNumbers(A, B, C);
}
}
|
Python3
def gcd(a, b):
if (b = = 0 ):
return a
return gcd(b, a % b)
def countDistinctNumbers(A, B, C):
g = gcd(A, B)
count = C / / g
print (count)
A = 2
B = 3
C = 5
countDistinctNumbers(A, B, C)
|
C#
using System;
class GFG{
static long gcd( long a, long b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
static void countDistinctNumbers( long A, long B,
long C)
{
long g = gcd(A, B);
long count = C / g;
Console.Write(count);
}
static void Main()
{
long A = 2, B = 3, C = 5;
countDistinctNumbers(A, B, C);
}
}
|
Javascript
<script>
function gcd(a, b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
function countDistinctNumbers(A, B, C)
{
var g = gcd(A, B);
var count = C / g;
document.write(count);
}
var A = 2, B = 3, C = 5;
countDistinctNumbers(A, B, C);
</script>
|
Time Complexity: O(log(min(A, B)))
Auxiliary Space: O(1)