Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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<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




// 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




<?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.
?>


Javascript




<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))

 



Last Updated : 11 Sep, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads