Count all N digit numbers whose digits are multiple of X
Given two integers N and X, the task is to find the count of all possible N digit numbers whose every single digit is a multiple of X.
Examples :
Input: N = 1, X = 3
Output: 4
Explanation:
The single-digit numbers whose digits are multiple of 3 are 0, 3, 6 and 9.
So the answer will be 4.
Input: N = 2, X = 4
Output: 6
Explanation:
The two-digit numbers whose digits are multiple of 4 are 40, 44, 48, 80, 84, 88.
So the answer will be 6.
Naive Approach: The simplest approach is to iterate over all N-digit numbers, i.e. in the range [10N – 1, 10N – 1] and for each number, check if each digit of the number is a multiple of X or not. Increase the count of such numbers and print the final count.
Time Complexity: O((10N – 10N – 1)*N)
Auxiliary Space: O(1)
Efficient Approach: Follow the steps below in order to solve the problem:
- Count the total digits which are multiple of X, lets denote it as total_Multiples.
- BY arrange all the above digits in different positions to form an N-digit number the required count can be obtained.
Illustration:
For example N = 2, X = 3
Multiples of 3 are S = { 0, 3, 6, 9 }
- To find all 2-digit numbers, arrange all the multiples of X to form a 2-digit number and count it.
- Arrange the numbers from the set S. Taking 0 for the most significant bit will result in 1-digit number, so there are 3 ways to arrange the most significant position of a number and there are 4 ways to arrange the last digit of a number whose digits are multiples of 3.
So total ways = 3*4 = 12 so the answer will be 12.
- From the above illustration, if M is the count of all multiples of X, then the required count of N digit numbers(for N > 1) is equal to (M – 1)*MN – 1.
- For one-digit numbers, the answer is M.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <stdio.h> #define ll long long // Function to calculate x^n // using binary-exponentiation ll power(ll x, ll n) { // Stores the resultant power ll temp; if (n == 0) return 1; // Stores the value of x^(n/2) temp = power(x, n / 2); if (n % 2 == 0) return temp * temp; else return x * temp * temp; } // Function to count all N-digit numbers // whose digits are multiples of x ll count_Total_Numbers(ll n, ll x) { ll total, multiples = 0; // Count all digits which // are multiples of x for ( int i = 0; i < 10; i++) { // Check if current number // is a multiple of X if (i % x == 0) // Increase count of multiples multiples++; } // Check if it's a 1 digit number if (n == 1) return multiples; // Count the total numbers total = (multiples - 1) * power(multiples, n - 1); // Return the total numbers return total; } // Driver Code int main() { // Given N and X ll N = 1, X = 3; // Function Call printf ( "%lld " , count_Total_Numbers(N, X)); return 0; } |
Java
// Java program for // the above approach class GFG{ // Function to calculate x^n // using binary-exponentiation static int power( int x, int n) { // Stores the resultant power int temp; if (n == 0 ) return 1 ; // Stores the value of x^(n/2) temp = power(x, n / 2 ); if (n % 2 == 0 ) return temp * temp; else return x * temp * temp; } // Function to count all N-digit // numbers whose digits are multiples // of x static int count_Total_Numbers( int n, int x) { int total, multiples = 0 ; // Count all digits which // are multiples of x for ( int i = 0 ; i < 10 ; i++) { // Check if current number // is a multiple of X if (i % x == 0 ) // Increase count of multiples multiples++; } // Check if it's a 1 digit number if (n == 1 ) return multiples; // Count the total numbers total = (multiples - 1 ) * power(multiples, n - 1 ); // Return the total numbers return total; } // Driver Code public static void main(String[] args) { // Given N and X int N = 1 , X = 3 ; // Function Call System.out.printf( "%d " , count_Total_Numbers(N, X)); } } // This code is contributed by 29AjayKumar |
Python3
# Python3 program for the above approach # Function to calculate x^n # using binary-exponentiation def power(x, n): # Stores the resultant power temp = [] if (n = = 0 ): return 1 # Stores the value of x^(n/2) temp = power(x, n / / 2 ) if (n % 2 = = 0 ): return temp * temp else : return x * temp * temp # Function to count aN-digit numbers # whose digits are multiples of x def count_Total_Numbers(n, x): total, multiples = 0 , 0 # Count adigits which # are multiples of x for i in range ( 10 ): # Check if current number # is a multiple of X if (i % x = = 0 ): # Increase count of multiples multiples + = 1 # Check if it's a 1 digit number if (n = = 1 ): return multiples # Count the total numbers total = ((multiples - 1 ) * power(multiples, n - 1 )) # Return the total numbers return total # Driver Code if __name__ = = '__main__' : # Given N and X N = 1 X = 3 # Function call print (count_Total_Numbers(N, X)) # This code is contributed by mohit kumar 29 |
C#
// C# program for the above approach using System; class GFG{ // Function to calculate x^n // using binary-exponentiation static int power( int x, int n) { // Stores the resultant power int temp; if (n == 0) return 1; // Stores the value of x^(n/2) temp = power(x, n / 2); if (n % 2 == 0) return temp * temp; else return x * temp * temp; } // Function to count all N-digit // numbers whose digits are multiples // of x static int count_Total_Numbers( int n, int x) { int total, multiples = 0; // Count all digits which // are multiples of x for ( int i = 0; i < 10; i++) { // Check if current number // is a multiple of X if (i % x == 0) // Increase count of multiples multiples++; } // Check if it's a 1 digit number if (n == 1) return multiples; // Count the total numbers total = (multiples - 1) * power(multiples, n - 1); // Return the total numbers return total; } // Driver Code public static void Main() { // Given N and X int N = 1, X = 3; // Function call Console.Write(count_Total_Numbers(N, X)); } } // This code is contributed by sanjoy_62 |
Javascript
<script> // Javascript program for the above approach // Function to calculate x^n // using binary-exponentiation function power(x, n) { // Stores the resultant power let temp; if (n == 0) return 1; // Stores the value of x^(n/2) temp = power(x, parseInt(n / 2)); if (n % 2 == 0) return temp * temp; else return x * temp * temp; } // Function to count all N-digit numbers // whose digits are multiples of x function count_Total_Numbers(n, x) { let total, multiples = 0; // Count all digits which // are multiples of x for (let i = 0; i < 10; i++) { // Check if current number // is a multiple of X if (i % x == 0) // Increase count of multiples multiples++; } // Check if it's a 1 digit number if (n == 1) return multiples; // Count the total numbers total = (multiples - 1) * power(multiples, n - 1); // Return the total numbers return total; } // Driver Code // Given N and X let N = 1, X = 3; // Function Call document.write( count_Total_Numbers(N, X)); // This code is contributed by subhammahato348. </script> |
4
Time Complexity: O(Log N)
Auxiliary Space: O(1)
Please Login to comment...