Largest number made up of X and Y with count of X divisible by Y and of Y by X

• Difficulty Level : Medium
• Last Updated : 11 May, 2021

Given three integers X, Y and N, the task is to find the largest number possible of length N consisting only of X and Y as its digits, such that, the count of X‘s in it is divisible by Y and vice-versa. If no such number can be formed, print -1.
Examples:

Input: N = 3, X = 5, Y = 3
Output: 555
Explanation:
Count of 5’s = 3, which is divisible by 3
Count of 3’s = 0
Input: N = 4, X = 7, Y = 5
Output: -1

Approach:
Follow the steps below to solve the problem:

• Consider the larger of X and Y as X and smaller as Y.
• Since, the number needs to of length N, perform the following two steps until N ≤ 0:
• If N is divisible by Y, append X, N times to the answer and reduce N to zero.
• Otherwise, reduce N by X and append Y, X times to the answer.
• After completion of the above step, if N <0, then a number of required type is not possible. Print -1.

Below is the implementation of the above approach:

C++

 // C++ program to implement// the above approach#include using namespace std; // Function to generate and return// the largest numbervoid largestNumber(int n, int X, int Y){    int maxm = max(X, Y);     // Store the smaller in Y    Y = X + Y - maxm;     // Store the larger in X    X = maxm;     // Stores respective counts    int Xs = 0;    int Ys = 0;     while (n > 0) {         // If N is divisible by Y        if (n % Y == 0) {             // Append X, N times to            // the answer            Xs += n;             // Reduce N to zero            n = 0;        }        else {             // Reduce N by X            n -= X;             // Append Y, X times            // to the answer            Ys += X;        }    }     // If number can be formed    if (n == 0) {        while (Xs-- > 0)            cout << X;         while (Ys-- > 0)            cout << Y;    }     // Otherwise    else        cout << "-1";} // Driver Codeint main(){    int n = 19, X = 7, Y = 5;    largestNumber(n, X, Y);    return 0;}

Java

 // Java program to implement the// above approachimport java.util.*; class GFG{     // Function to generate and return// the largest numberpublic static void largestNumber(int n, int X,                                        int Y){    int maxm = Math.max(X, Y);         // Store the smaller in Y    Y = X + Y - maxm;         // Store the larger in X    X = maxm;         // Stores respective counts    int Xs = 0;    int Ys = 0;         while (n > 0)    {                 // If N is divisible by Y        if (n % Y == 0)        {                         // Append X, N times to            // the answer            Xs += n;                 // Reduce N to zero            n = 0;        }        else        {            // Reduce N by X            n -= X;                 // Append Y, X times            // to the answer            Ys += X;        }    }         // If number can be formed    if (n == 0)    {        while (Xs-- > 0)            System.out.print(X);             while (Ys-- > 0)            System.out.print(Y);    }         // Otherwise    else        System.out.print("-1");} // Driver codepublic static void main (String[] args){    int n = 19, X = 7, Y = 5;         largestNumber(n, X, Y);}} // This code is contributed by divyeshrabadiya07

Python3

 # Python3 program to implement# the above approach # Function to generate and return# the largest numberdef largestNumber(n, X, Y):     maxm = max(X, Y)     # Store the smaller in Y    Y = X + Y - maxm     # Store the larger in X    X = maxm     # Stores respective counts    Xs = 0    Ys = 0     while (n > 0):         # If N is divisible by Y        if (n % Y == 0):             # Append X, N times to            # the answer            Xs += n             # Reduce N to zero            n = 0         else:                         # Reduce N by x            n -= X             # Append Y, X times to            # the answer            Ys += X     # If number can be formed    if (n == 0):                 while (Xs > 0):            Xs -= 1            print(X, end = '')                     while (Ys > 0):            Ys -= 1            print(Y, end = '')     # Otherwise    else:        print("-1") # Driver coden = 19X = 7Y = 5 largestNumber(n, X, Y) # This code is contributed by himanshu77

C#

 // C# program to implement the// above approachusing System;class GFG{     // Function to generate and return// the largest numberpublic static void largestNumber(int n, int X,                                        int Y){    int maxm = Math.Max(X, Y);         // Store the smaller in Y    Y = X + Y - maxm;         // Store the larger in X    X = maxm;         // Stores respective counts    int Xs = 0;    int Ys = 0;         while (n > 0)    {                 // If N is divisible by Y        if (n % Y == 0)        {                         // Append X, N times to            // the answer            Xs += n;                 // Reduce N to zero            n = 0;        }        else        {            // Reduce N by X            n -= X;                 // Append Y, X times            // to the answer            Ys += X;        }    }         // If number can be formed    if (n == 0)    {        while (Xs-- > 0)            Console.Write(X);             while (Ys-- > 0)            Console.Write(Y);    }         // Otherwise    else        Console.Write("-1");} // Driver codepublic static void Main (String[] args){    int n = 19, X = 7, Y = 5;         largestNumber(n, X, Y);}} // This code is contributed by shivanisinghss2110

Javascript


Output:
7777755555555555555

Time Complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up