Wednesday, 27 Oct 2021

# Count numbers up to C that can be reduced to 0 by adding or subtracting A or B

Count numbers up to C that can be reduced to 0 by adding or subtracting A or B 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 = 7Output: 3Explanation: 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 = 5Output: 5Approach: 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 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