# 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: Please solve it on “PRACTICE ” first, before moving on to the solution.

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

 ` `

Output :

```123
```

This article is contributed by Anuj Chauhan. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.