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 of all even numbers in the range [L, R] whose sum of digits is divisible by 3
- Count numbers in range L-R that are divisible by all of its non-zero digits
- 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 from range [L, R] that end with any of the given digits
- 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
- Check if the number formed by the last digits of N numbers is divisible by 10 or not
- Find N numbers such that a number and its reverse are divisible by sum of its digits
- Check if the sum of digits of number is divisible by all of its digits
- Count Numbers with N digits which consists of even number of 0’s
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.