Given an integer K and a range of consecutive numbers [L, R]. The task is to count the numbers from the given range which have digital root as K (1 ? K ? 9). Digital root is sum of digits of a number until it becomes a single digit number. For example, 256 -> 2 + 5 + 6 = 13 -> 1 + 3 = 4.
Examples:
Input: L = 10, R = 22, K = 3
Output: 2
12 and 21 are the only numbers from the range whose digit sum is 3.Input: L = 100, R = 200, K = 5
Output: 11
Approach:
- First thing is to note that for any number Sum of Digits is equal to Number % 9. If remainder is 0, then sum of digits is 9.
- So if K = 9, then replace K with 0.
- Task, now is to find count of numbers in range L to R with modulo 9 equal to K.
- Divide the entire range into the maximum possible groups of 9 starting with L (TotalRange / 9), since in each range there will be exactly one number with modulo 9 equal to K.
- Loop over rest number of elements from R to R – count of rest elements, and check if any number satisfies the condition.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> #define ll long long int using namespace std;
// Function to return the count // of required numbers int countNumbers( int L, int R, int K)
{ if (K == 9)
K = 0;
// Count of numbers present
// in given range
int totalnumbers = R - L + 1;
// Number of groups of 9 elements
// starting from L
int factor9 = totalnumbers / 9;
// Left over elements not covered
// in factor 9
int rem = totalnumbers % 9;
// One Number in each group of 9
int ans = factor9;
// To check if any number in rem
// satisfy the property
for ( int i = R; i > R - rem; i--) {
int rem1 = i % 9;
if (rem1 == K)
ans++;
}
return ans;
} // Driver code int main()
{ int L = 10;
int R = 22;
int K = 3;
cout << countNumbers(L, R, K);
return 0;
} |
Java
// Java implementation of the approach class GFG {
// Function to return the count // of required numbers static int countNumbers( int L, int R, int K) {
if (K == 9 ) {
K = 0 ;
}
// Count of numbers present
// in given range
int totalnumbers = R - L + 1 ;
// Number of groups of 9 elements
// starting from L
int factor9 = totalnumbers / 9 ;
// Left over elements not covered
// in factor 9
int rem = totalnumbers % 9 ;
// One Number in each group of 9
int ans = factor9;
// To check if any number in rem
// satisfy the property
for ( int i = R; i > R - rem; i--) {
int rem1 = i % 9 ;
if (rem1 == K) {
ans++;
}
}
return ans;
}
// Driver code public static void main(String[] args) {
int L = 10 ;
int R = 22 ;
int K = 3 ;
System.out.println(countNumbers(L, R, K));
}
} /* This code contributed by PrinciRaj1992 */ |
Python3
# Python3 implementation of the approach # Function to return the count # of required numbers def countNumbers(L, R, K):
if (K = = 9 ):
K = 0
# Count of numbers present
# in given range
totalnumbers = R - L + 1
# Number of groups of 9 elements
# starting from L
factor9 = totalnumbers / / 9
# Left over elements not covered
# in factor 9
rem = totalnumbers % 9
# One Number in each group of 9
ans = factor9
# To check if any number in rem
# satisfy the property
for i in range (R, R - rem, - 1 ):
rem1 = i % 9
if (rem1 = = K):
ans + = 1
return ans
# Driver code L = 10
R = 22
K = 3
print (countNumbers(L, R, K))
# This code is contributed # by mohit kumar |
C#
// C# implementation of the approach using System ;
class GFG
{ // Function to return the count
// of required numbers
static int countNumbers( int L, int R, int K)
{
if (K == 9)
{
K = 0;
}
// Count of numbers present
// in given range
int totalnumbers = R - L + 1;
// Number of groups of 9 elements
// starting from L
int factor9 = totalnumbers / 9;
// Left over elements not covered
// in factor 9
int rem = totalnumbers % 9;
// One Number in each group of 9
int ans = factor9;
// To check if any number in rem
// satisfy the property
for ( int i = R; i > R - rem; i--)
{
int rem1 = i % 9;
if (rem1 == K)
{
ans++;
}
}
return ans;
}
// Driver code
public static void Main()
{
int L = 10;
int R = 22;
int K = 3;
Console.WriteLine(countNumbers(L, R, K));
}
} /* This code is contributed by Ryuga */ |
PHP
<?php // PHP implementation of the approach // Function to return the count // of required numbers function countNumbers( $L , $R , $K )
{ if ( $K == 9)
$K = 0;
// Count of numbers present
// in given range
$totalnumbers = $R - $L + 1;
// Number of groups of 9 elements
// starting from L
$factor9 = intval ( $totalnumbers / 9);
// Left over elements not covered
// in factor 9
$rem = $totalnumbers % 9;
// One Number in each group of 9
$ans = $factor9 ;
// To check if any number in rem
// satisfy the property
for ( $i = $R ; $i > $R - $rem ; $i --)
{
$rem1 = $i % 9;
if ( $rem1 == $K )
$ans ++;
}
return $ans ;
} // Driver code $L = 10;
$R = 22;
$K = 3;
echo countNumbers( $L , $R , $K );
// This code is contributed by Ita_c ?> |
Javascript
<script> // Javascript implementation of the approach // Function to return the count // of required numbers function countNumbers(L, R, K)
{ if (K == 9)
{
K = 0;
}
// Count of numbers present
// in given range
var totalnumbers = R - L + 1;
// Number of groups of 9 elements
// starting from L
var factor9 = totalnumbers / 9;
// Left over elements not covered
// in factor 9
var rem = totalnumbers % 9;
// One Number in each group of 9
var ans = factor9;
// To check if any number in rem
// satisfy the property
for ( var i = R; i > R - rem; i--)
{
var rem1 = i % 9;
if (rem1 == K)
{
ans++;
}
}
return ans;
} // Driver Code var L = 10;
var R = 22;
var K = 3;
document.write(Math.round(countNumbers(L, R, K))); // This code is contributed by Ankita saini </script> |
Output:
2
Time Complexity: O(R)
Auxiliary Space: O(1)