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
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:
// C++ program to print Greatest Common Divisor
// of number formed by N repeating x times and
// y times.
#include<bits/stdc++.h>
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 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.
# 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# 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
// PHP 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.
function 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.
function findgcd($n, $x, $y)
{
// Finding GCD of x and y.
$g = gcd($x, $y);
// Print n, g times.
for ($i = 0; $i < $g; $i++)
echo($n);
}
// Driver Code
$n = 123; $x = 5; $y = 2;
findgcd($n, $x, $y);
// This code is contributed by Ajit.
?>
<script>
// Javascript 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.
function 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.
function findgcd(n, x, y)
{
// Finding GCD of x and y.
let g = gcd(x,y);
// Print n, g times.
for (let i = 0; i < g; i++)
document.write(n);
}
// Driven Program
let n = 123, x = 5, y = 2;
findgcd(n, x, y);
// This is code is contributed by Mayank Tyagi
</script>
Output :
123
Time Complexity: O(log(min(n)) )
Auxiliary Space: O(log(min(n))