GCD of two numbers formed by n repeating x and y times

Given three positive integer n, x, y. The task is to print Greatest Common Divisor of numbers formed by n repeating x times and number formed by n repeating y times.
0 <= n, x, y <= 1000000000.
Examples :

```Input : n = 123, x = 2, y = 3.
Output : 123
Number formed are 123123 and 123123123.
Greatest Common Divisor of 123123 and
123123123 is 123.

Input : n = 4, x = 4, y = 6.
Output : 44```

Recommended Practice

The idea is based on Euclidean algorithm to compute GCD of two number
Let f(n, x) be a function which gives a number n repeated x times. So, we need to find GCD(f(n, x), f(n, y)).
Let n = 123, x = 3, y = 2.
So, first number A is f(123, 3) = 123123123 and second number B is f(123, 2) = 123123. We know, GCD(A,B) = GCD(A – B, B), using this property we can subtract any multiple of B, say B’ from first A as long as B’ is smaller than A.
So, A = 123123123 and B’ can be 123123000. On subtracting A will became 123 and B remains same.
Therefore, A = A – B’ = f(n, x – y).
So, GCD(f(n, x), f(n, y)) = GCD(f(n, x – y), f(n, y))
We can conclude following,

`GCD(f(n, x), f(n, y)) = f(n, GCD(x, y)). `

Below is the implementation based on this approach:

CPP

 `// C++ program to print Greatest Common Divisor ``// of number formed by N repeating x times and ``// y times. ``#include ``using` `namespace` `std; `` ` `// Return the Greatest common Divisor of two numbers. ``int` `gcd(``int` `a, ``int` `b) ``{ ``    ``if` `(a == 0) ``        ``return` `b; ``    ``return` `gcd(b%a, a); ``} `` ` `// Prints Greatest Common Divisor of number formed ``// by n repeating x times and y times. ``void` `findgcd(``int` `n, ``int` `x, ``int` `y) ``{ ``    ``// Finding GCD of x and y. ``    ``int` `g = gcd(x,y); `` ` `    ``// Print n, g times. ``    ``for` `(``int` `i = 0; i < g; i++) ``        ``cout << n; ``} `` ` `// Driven Program ``int` `main() ``{ ``    ``int` `n = 123, x = 5, y = 2; ``    ``findgcd(n, x, y); ``    ``return` `0; ``} `

Java

 `// Java program to print Greatest Common Divisor ``// of number formed by N repeating x times and ``// y times ``class` `GFG { ``     ` `    ``// Return the Greatest common Divisor ``    ``// of two numbers. ``    ``static` `int` `gcd(``int` `a, ``int` `b) { ``         ` `        ``if` `(a == ``0``) ``            ``return` `b; ``             ` `        ``return` `gcd(b % a, a); ``    ``} ``     ` `    ``// Prints Greatest Common Divisor of  ``    ``// number formed by n repeating x ``    ``// times and y times. ``    ``static` `void` `findgcd(``int` `n, ``int` `x, ``int` `y) { ``         ` `        ``// Finding GCD of x and y. ``        ``int` `g = gcd(x, y); ``     ` `        ``// Print n, g times. ``        ``for` `(``int` `i = ``0``; i < g; i++) ``            ``System.out.print(n); ``    ``} ``     ` `    ``// Driver code ``    ``public` `static` `void` `main(String[] args) { ``         ` `        ``int` `n = ``123``, x = ``5``, y = ``2``; ``        ``findgcd(n, x, y); ``    ``} ``} `` ` `// This code is contributed by Anant Agarwal. `

Python3

 `# Python program to print Greatest ``# Common Divisor of number formed  ``# by N repeating x times and y times `` ` `# Return the Greatest common Divisor ``# of two numbers. ``def` `gcd(a, b): ``     ` `    ``if` `(a ``=``=` `0``): ``        ``return` `b ``     ` `    ``return` `gcd(b ``%` `a, a) `` ` `# Prints Greatest Common Divisor of ``# number formed by n repeating x times ``# and y times. ``def` `findgcd(n, x, y): `` ` `    ``# Finding GCD of x and y. ``    ``g ``=` `gcd(x, y) `` ` `    ``# Print n, g times. ``    ``for` `i ``in` `range``(g): ``        ``print``(n) `` ` `# Driver code ``n ``=` `123``x ``=` `5``y ``=` `2`` ` `findgcd(n, x, y) `` ` `# This code is contributed by Anant Agarwal. `

C#

 `// C# program to print Greatest Common ``// Divisor of number formed by N  ``// repeating x times and y times ``using` `System; `` ` `class` `GFG { ``     ` `    ``// Return the Greatest common ``    ``// Divisor of two numbers. ``    ``static` `int` `gcd(``int` `a, ``int` `b) ``    ``{ ``         ` `        ``if` `(a == 0) ``            ``return` `b; ``             ` `        ``return` `gcd(b % a, a); ``    ``} ``     ` `    ``// Prints Greatest Common ``    ``// Divisor of number formed ``    ``// by n repeating x times  ``    ``// and y times. ``    ``static` `void` `findgcd(``int` `n, ``                      ``int` `x, ``int` `y) ``    ``{ ``         ` `        ``// Finding GCD of x and y. ``        ``int` `g = gcd(x, y); ``     ` `        ``// Print n, g times. ``        ``for` `(``int` `i = 0; i < g; i++) ``            ``Console.Write(n); ``    ``} ``     ` `    ``// Driver code ``    ``public` `static` `void` `Main() { ``         ` `        ``int` `n = 123, x = 5, y = 2; ``         ` `        ``findgcd(n, x, y); ``    ``} ``} `` ` `// This code is contributed by ``// nitin mittal. `

PHP

 ` `

Javascript

 ` `

Output :

`123`

Time Complexity: O(log(min(n)) )
Auxiliary Space: O(log(min(n))

Previous
Next