Given three positive integers L, R and K.The task is to find the count of all the numbers from the range [L, R] that contains at least one digit which divides the number K.
Examples:
Input: L = 5, R = 11, K = 10
Output: 3
5, 10 and 11 are only such numbers.Input: L = 32, R = 38, K = 13
Output: 0
Approach: Initialise count = 0 and for every element in the range [L, R], check if it contains at least one digit that divides K. If yes then increment the count.
Below is the implementation of the above approach:
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function that returns true if num // contains at least one digit // that divides k bool digitDividesK( int num, int k)
{ while (num) {
// Get the last digit
int d = num % 10;
// If the digit is non-zero
// and it divides k
if (d != 0 and k % d == 0)
return true ;
// Remove the last digit
num = num / 10;
}
// There is no digit in num
// that divides k
return false ;
} // Function to return the required // count of elements from the given // range which contain at least one // digit that divides k int findCount( int l, int r, int k)
{ // To store the result
int count = 0;
// For every number from the range
for ( int i = l; i <= r; i++) {
// If any digit of the current
// number divides k
if (digitDividesK(i, k))
count++;
}
return count;
} // Driver code int main()
{ int l = 20, r = 35;
int k = 45;
cout << findCount(l, r, k);
return 0;
} |
// Java implementation of the approach class GFG
{ // Function that returns true if num
// contains at least one digit
// that divides k
static boolean digitDividesK( int num, int k)
{
while (num != 0 )
{
// Get the last digit
int d = num % 10 ;
// If the digit is non-zero
// and it divides k
if (d != 0 && k % d == 0 )
return true ;
// Remove the last digit
num = num / 10 ;
}
// There is no digit in num
// that divides k
return false ;
}
// Function to return the required
// count of elements from the given
// range which contain at least one
// digit that divides k
static int findCount( int l, int r, int k)
{
// To store the result
int count = 0 ;
// For every number from the range
for ( int i = l; i <= r; i++)
{
// If any digit of the current
// number divides k
if (digitDividesK(i, k))
count++;
}
return count;
}
// Driver code
public static void main(String []args)
{
int l = 20 , r = 35 ;
int k = 45 ;
System.out.println(findCount(l, r, k));
}
} // This code is contributed by PrinciRaj1992 |
# Python3 implementation of the approach # Function that returns true if num # contains at least one digit # that divides k def digitDividesK(num, k):
while (num):
# Get the last digit
d = num % 10
# If the digit is non-zero
# and it divides k
if (d ! = 0 and k % d = = 0 ):
return True
# Remove the last digit
num = num / / 10
# There is no digit in num
# that divides k
return False
# Function to return the required # count of elements from the given # range which contain at least one # digit that divides k def findCount(l, r, k):
# To store the result
count = 0
# For every number from the range
for i in range (l, r + 1 ):
# If any digit of the current
# number divides k
if (digitDividesK(i, k)):
count + = 1
return count
# Driver code l = 20
r = 35
k = 45
print (findCount(l, r, k))
# This code is contributed by Mohit Kumar |
// C# implementation of the approach using System;
class GFG
{ // Function that returns true if num
// contains at least one digit
// that divides k
static bool digitDividesK( int num, int k)
{
while (num != 0)
{
// Get the last digit
int d = num % 10;
// If the digit is non-zero
// and it divides k
if (d != 0 && k % d == 0)
return true ;
// Remove the last digit
num = num / 10;
}
// There is no digit in num
// that divides k
return false ;
}
// Function to return the required
// count of elements from the given
// range which contain at least one
// digit that divides k
static int findCount( int l, int r, int k)
{
// To store the result
int count = 0;
// For every number from the range
for ( int i = l; i <= r; i++)
{
// If any digit of the current
// number divides k
if (digitDividesK(i, k))
count++;
}
return count;
}
// Driver code
public static void Main()
{
int l = 20, r = 35;
int k = 45;
Console.WriteLine(findCount(l, r, k));
}
} // This code is contributed by AnkitRai01 |
<script> // Javascript implementation of the approach // Function that returns true if num // contains at least one digit // that divides k function digitDividesK(num, k)
{ while (num)
{
// Get the last digit
let d = num % 10;
// If the digit is non-zero
// and it divides k
if (d != 0 && k % d == 0)
return true ;
// Remove the last digit
num = parseInt(num / 10);
}
// There is no digit in num
// that divides k
return false ;
} // Function to return the required // count of elements from the given // range which contain at least one // digit that divides k function findCount(l, r, k)
{ // To store the result
let count = 0;
// For every number from the range
for (let i = l; i <= r; i++)
{
// If any digit of the current
// number divides k
if (digitDividesK(i, k))
count++;
}
return count;
} // Driver code let l = 20, r = 35; let k = 45; document.write(findCount(l, r, k)); // This code is contributed by souravmahato348 </script> |
10
Time Complexity: O((r-l)*(log10(num)))
Auxiliary Space: O(1)