Given three positive integers N, K, and M. The task is to find Kth largest N digit number divisible by M.
Note: K will be such an integer that Kth largest N digit number divisible by M always exists.
Examples
Input: N = 2, K = 2, M = 2
Output: 96
Explanation: The 2nd largest 2 digit number divisible by 2 is 96.Input: N = 9, K = 6, M = 4
Output: 999999976
Approach: The problem is maths-based. Given three numbers N, K, and M. It is required to find the Kth largest N digit number divisible by M. To get the largest N digit divisible by M, at first it is required to find the largest N digit number(say P), which is N times 9.
Now the largest N digit number divisible by M is (P – (P%M)).
Therefore, subtract (K-1) times M from this value to get the Kth largest value of N digit number which is divisible by M.
Given below is the conditions and mathematical expression to get Kth largest N digit number divisible by M.
Let P be the largest N digit number.
Then the largest N digit number divisible by M is: (P – (P % M)).
Now the Kth largest N digit number divisible by M is: [(P – (P % M)) – ((K – 1) * M)]
Below is the code according to the above formula.
// C++ program for above approach #include <iostream> using namespace std;
// Function to find Kth N // digit number divisible by M int findAnswer( int N, int K, int M)
{ int i;
long long int r = 0;
// Loop to calculate the largest
// N digit number.
for (i = 1; i <= N; i++) {
r = r * 10 + 9;
}
// Kth largest N digit number
// divisible by M.
long long int u = r - (r % M)
- M * (K - 1);
return u;
} // Driver Code int main()
{ int N = 9;
int K = 6;
int M = 4;
cout << findAnswer(N, K, M);
return 0;
} |
// Java program for above approach import java.util.*;
class GFG{
// Function to find Kth N
// digit number divisible by M
static int findAnswer( int N, int K, int M)
{
int i;
int r = 0 ;
// Loop to calculate the largest
// N digit number.
for (i = 1 ; i <= N; i++) {
r = r * 10 + 9 ;
}
// Kth largest N digit number
// divisible by M.
int u = r - (r % M)
- M * (K - 1 );
return u;
}
// Driver Code
public static void main(String[] args)
{
int N = 9 ;
int K = 6 ;
int M = 4 ;
System.out.print(findAnswer(N, K, M));
}
} // This code is contributed by 29AjayKumar |
# Python code for the above approach # Function to find Kth N # digit number divisible by M def findAnswer(N, K, M):
i = None
r = 0 ;
# Loop to calculate the largest
# N digit number.
for i in range ( 1 , N + 1 ):
r = r * 10 + 9 ;
# Kth largest N digit number
# divisible by M.
u = r - (r % M) - M * (K - 1 );
return u;
# Driver Code N = 9 ;
K = 6 ;
M = 4 ;
print (findAnswer(N, K, M));
# This code is contributed by Saurabh Jaiswal |
// C# program for above approach using System;
class GFG
{ // Function to find Kth N
// digit number divisible by M
static int findAnswer( int N, int K, int M)
{
long r = 0;
// Loop to calculate the largest
// N digit number.
for ( int i = 1; i <= N; i++) {
r = r * 10 + 9;
}
// Kth largest N digit number
// divisible by M.
long u = r - (r % M)
- M * (K - 1);
return ( int )u;
}
// Driver Code
public static void Main()
{
int N = 9;
int K = 6;
int M = 4;
Console.Write(findAnswer(N, K, M));
}
} // This code is contributed by Samim Hossain Mondal. |
<script> // JavaScript code for the above approach
// Function to find Kth N
// digit number divisible by M
function findAnswer(N, K, M) {
let i;
let r = 0;
// Loop to calculate the largest
// N digit number.
for (i = 1; i <= N; i++) {
r = r * 10 + 9;
}
// Kth largest N digit number
// divisible by M.
let u = r - (r % M)
- M * (K - 1);
return u;
}
// Driver Code
let N = 9;
let K = 6;
let M = 4;
document.write(findAnswer(N, K, M));
// This code is contributed by Potta Lokesh
</script> |
999999976
Time Complexity: O(MaxDigit), Where maxDigit is the largest N digit number.
Auxiliary Space: O(1)