# Count of distinct values till C formed by adding or subtracting A, B, or 0 any number of times

• Difficulty Level : Hard
• Last Updated : 30 Aug, 2021

Given three integers A, B and C. You can add or subtract A, B, or 0 any number of times to form new values in range 0 < final_value ≤ C. The task is to find the count of such distinct final values possible.

Examples :

Input : A = 2, B = 3, C = 10
Output:10
Possible values are :
0 + 3 – 2 =1
0 + 2 = 2
0 + 3 = 3
2 + 2 = 4
2 + 3 = 5
3 + 3 = 6
3+2+2=7
2+2+2+2=8
2+2+2+3=9
3+3+2+2=10

Input : A = 10, B = 2, C = 10
Output: 5

Approach: The idea is to use the GCD g of A and B.

The above approach works Because every distinct possible value is xA+yB

• If A can be written as g×a, B can  be written as g×b
• Then, A required final value can be written as xAg+yBg = (x*g*a + y*g*b) = g*(xa+yb)
• Since maximum value possible is C, therefore C = g*(xa+yb).
• Hence count of possible such values = C/g, which is the required answer.

Below is the implementation of the above approach :

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to calculate gcd``int` `gcd(``int` `A, ``int` `B)``{``    ``if` `(B == 0)``        ``return` `A;``    ``else``        ``return` `gcd(B, A % B);``}` `// Function to find number of possible final values``int` `getDistinctValues(``int` `A, ``int` `B, ``int` `C)``{``    ` `    ``// Find the gcd of two numbers``    ``int` `g = gcd(A, B);` `    ``// Calculate number of distinct values``    ``int` `num_values = C / g;` `    ``// Return values``    ``return` `num_values;``}` `// Driver Code``int` `main()``{``    ``int` `A = 2;``    ``int` `B = 3;``    ``int` `C = 10;` `    ``cout << (getDistinctValues(A, B, C));``    ``return` `0;``}` `// This code is contributed by subhammahato348`

## Java

 `// Java program for the above approach` `import` `java.util.*;` `class` `GFG {``    ``// Function to calculate gcd``    ``static` `int` `gcd(``int` `A, ``int` `B)``    ``{``        ``if` `(B == ``0``)``            ``return` `A;``        ``else``            ``return` `gcd(B, A % B);``    ``}` `    ``// Function to find number of possible final values``    ``static` `int` `getDistinctValues(``int` `A, ``int` `B, ``int` `C)``    ``{` `        ``// Find the gcd of two numbers``        ``int` `g = gcd(A, B);` `        ``// Calculate number of distinct values``        ``int` `num_values = C / g;` `        ``// Return values``        ``return` `num_values;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `A = ``2``;``        ``int` `B = ``3``;``        ``int` `C = ``10``;` `        ``System.out.println(getDistinctValues(A, B, C));``    ``}``}`

## Python3

 `# Python program for the above approach` `# Function to calculate gcd``def` `gcd(A, B) :``    ` `    ``if` `(B ``=``=` `0``) :``        ``return` `A;``    ``else` `:``        ``return` `gcd(B, A ``%` `B);` `# Function to find number of possible final values``def` `getDistinctValues(A, B, C) :``    ` `    ``# Find the gcd of two numbers``    ``g ``=` `gcd(A, B);` `    ``# Calculate number of distinct values``    ``num_values ``=` `C ``/` `g;` `    ``# Return values``    ``return` `int``(num_values);` `# Driver Code``A ``=` `2``;``B ``=` `3``;``C ``=` `10``;` `print``(getDistinctValues(A, B, C));` `# This code is contributed by target_2.`

## C#

 `// C# program for the above approach``using` `System;``class` `GFG``{` `  ``// Function to calculate gcd``  ``static` `int` `gcd(``int` `A, ``int` `B)``  ``{``    ``if` `(B == 0)``      ``return` `A;``    ``else``      ``return` `gcd(B, A % B);``  ``}` `  ``// Function to find number of possible final values``  ``static` `int` `getDistinctValues(``int` `A, ``int` `B, ``int` `C)``  ``{` `    ``// Find the gcd of two numbers``    ``int` `g = gcd(A, B);` `    ``// Calculate number of distinct values``    ``int` `num_values = C / g;` `    ``// Return values``    ``return` `num_values;``  ``}`  `  ``// Driver code``  ``static` `void` `Main()``  ``{``    ``int` `A = 2;``    ``int` `B = 3;``    ``int` `C = 10;` `    ``Console.Write(getDistinctValues(A, B, C));``  ``}``}` `// This code is contributed by sanjoy_62.`

## Javascript

 ``

Output

`10`

Time Complexity : O(log(max(A, B))

Space Complexity : O(1)

My Personal Notes arrow_drop_up