Given a range [L, R] and two positive integers N and M. The task is to count the numbers in the range containing only non-zero digits whose sum of digits is equal to N and the number is divisible by M.
Input: L = 1, R = 100, N = 8, M = 2
Only 8, 26, 44 and 62 are valid numbers
Input: L = 1, R = 200, N = 4, M = 11
Only 22 and 121 are valid numbers
Prerequisites : Digit DP
Approach: Firstly, if we are able to count the required numbers up to R i.e. in the range [0, R], we can easily reach our answer in the range [L, R] by solving for from zero to R and then subtracting the answer we get after solving for from zero to L – 1. Now, we need to define the DP states.
- Since we can consider our number as a sequence of digits, one state is the position at which we are currently in. This position can have values from 0 to 18 if we are dealing with the numbers up to 1018. In each recursive call, we try to build the sequence from left to right by placing a digit from 0 to 9.
- Second state is the sum of the digits we have placed so far.
- Third state is the remainder which defines the modulus of the number we have made so far modulo M.
- Another state is the boolean variable tight which tells the number we are trying to build has already become smaller than R so that in the upcoming recursive calls we can place any digit from 0 to 9. If the number has not become smaller, the maximum limit of digit we can place is digit at the current position in R.
For the number to have only non-zero digits, we maintain a variable nonz whose value if 1 tells the first digit in the number we have placed is a non-zero digit and thus, now we can’t place any zero digit in upcoming calls. Otherwise, we can place a zero digit as a leading zero so as to make number of digits in current number smaller than number of digits in upper limit.
Below is the implementation of the above approach:
Short Python Implementation :
- Count numbers in range L-R that are divisible by all of its non-zero digits
- Count of all even numbers in the range [L, R] whose sum of digits is divisible by 3
- Count numbers in given range such that sum of even digits is greater than sum of odd digits
- Count of Numbers in Range where the number does not contain more than K non zero digits
- Count of integers in a range which have even number of odd digits and odd number of even digits
- Number of integers in a range [L, R] which are divisible by exactly K of it's digits
- Count the numbers with N digits and whose suffix is divisible by K
- Count of numbers from range [L, R] whose sum of digits is Y
- Count of numbers with all digits same in a given range
- Count of numbers from range [L, R] that end with any of the given digits
- Count of N-digit Numbers having Sum of even and odd positioned digits divisible by given numbers
- Check whether product of digits at even places is divisible by sum of digits at odd place of a number
- Count Numbers in Range with difference between Sum of digits at even and odd positions as Prime
- Count of numbers upto N digits formed using digits 0 to K-1 without any adjacent 0s
- Find N numbers such that a number and its reverse are divisible by sum of its digits
- Check if the number formed by the last digits of N numbers is divisible by 10 or not
- Check if the sum of digits of number is divisible by all of its digits
- Count Numbers with N digits which consists of odd number of 0's
- Count Numbers with N digits which consists of even number of 0’s
- Count of numbers in Array ending with digits of number N
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.