Sunday, October 12, 2025
HomeData Modelling & AICounting numbers whose difference from reverse is a product of k

Counting numbers whose difference from reverse is a product of k

Given two number l and r. Count the total numbers between l and r which when subtracted from their respective reverse, the difference is a product of k.
Examples: 

Input : 20 23 6
Output : 2
20 and 22 are the two numbers.
|20-2| = 18 which is a product of 6
|22-22| = 0 which is a product of 6

Input : 35 45 5
Output : 2
38 and 44 are the two numbers.
|38-83| = 45 which is a product of 5
|44-44| = 0 which is a product of 5

Approach: For each number between the given range check if the difference between the number and its reverse number is divisible by k, increment count if yes. 

C++




// C++ program to Count the numbers
// within a given range in which when
// you subtract a number from its
// reverse, the difference is a product
// of k
#include <iostream>
using namespace std;
 
bool isRevDiffDivisible(int x, int k)
{
    // function to check if the number
    // and its reverse have their
    // absolute difference divisible by k
    int n = x;
    int m = 0;
    int flag;
    while (x > 0)
    {  
        // reverse the number
        m = m * 10 + x % 10;
        x /= 10;
    }
     
    return (abs(n - m) % k == 0);
}
 
int countNumbers(int l, int r, int k)
{
    int count = 0;
    for (int i = l; i <= r; i++)   
        if (isRevDiffDivisible(i, k))       
            ++count;
    return count;
}
 
// Driver code
int main()
{
    int l = 20, r = 23, k = 6;
    cout << countNumbers(l, r, k) << endl;
    return 0;
}


Java




// Java program to Count the
// numbers within a given range
// in which when you subtract
// a number from its reverse,
// the difference is a product of k
import java.io.*;
import java.math.*;
 
class GFG {
     
    static boolean isRevDiffDivisible(int x, int k)
    {
        // function to check if the number
        // and its reverse have their
        // absolute difference divisible by k
        int n = x;
        int m = 0;
        int flag;
        while (x > 0)
        {
            // reverse the number
            m = m * 10 + x % 10;
            x /= 10;
        }
         
        return (Math.abs(n - m) % k == 0);
    }
     
    static int countNumbers(int l, int r, int k)
    {
        int count = 0;
        for (int i = l; i <= r; i++)
            if (isRevDiffDivisible(i, k))    
                ++count;
        return count;
    }
     
    // Driver code
    public static void main(String args[])
    {
        int l = 35, r = 45, k = 5;
        System.out.println(countNumbers(l, r, k));
    }
}
 
// This code is contributed
// by Nikita Tiwari.


Python3




# Python 3 program to Count the numbers
# within a given range in which when you
# subtract a number from its reverse,
# the difference is a product of k
 
def isRevDiffDivisible(x, k) :
    # function to check if the number
    # and its reverse have their
    # absolute difference divisible by k
    n = x; m = 0
    while (x > 0) :
 
        # Reverse the number
        m = m * 10 + x % 10
        x = x // 10
         
    return (abs(n - m) % k == 0)
 
def countNumbers(l, r, k) :
    count = 0
    for i in range(l, r + 1) :
 
        if (isRevDiffDivisible(i, k)) :
            count = count + 1
     
    return count
     
     
# Driver code
l = 20; r = 23; k = 6
print(countNumbers(l, r, k))
 
 
# This code is contributed by Nikita Tiwari.


C#




// C# program to Count the
// numbers within a given range
// in which when you subtract
// a number from its reverse,
// the difference is a product of k
using System;
 
class GFG {
     
    static bool isRevDiffDivisible(int x, int k)
    {
        // function to check if the number
        // and its reverse have their
        // absolute difference divisible by k
        int n = x;
        int m = 0;
         
        // int flag;
        while (x > 0)
        {
            // reverse the number
            m = m * 10 + x % 10;
            x /= 10;
        }
         
        return (Math.Abs(n - m) % k == 0);
    }
     
    static int countNumbers(int l, int r, int k)
    {
        int count = 0;
         
        for (int i = l; i <= r; i++)
            if (isRevDiffDivisible(i, k))
                ++count;
        return count;
    }
     
    // Driver code
    public static void Main()
    {
        int l = 35, r = 45, k = 5;
        Console.WriteLine(countNumbers(l, r, k));
    }
}
 
// This code is contributed
// by vt_m.


Javascript




<script>
// javascript program to Count the
// numbers within a given range
// in which when you subtract
// a number from its reverse,
// the difference is a product of k
 
function isRevDiffDivisible(x , k)
{
    // function to check if the number
    // and its reverse have their
    // absolute difference divisible by k
    var n = x;
    var m = 0;
    var flag;
    while (x > 0)
    {
        // reverse the number
        m = m * 10 + x % 10;
        x = parseInt(x/10);
    }
     
    return (Math.abs(n - m) % k == 0);
}
 
function countNumbers(l , r , k)
{
    var count = 0;
    for (i = l; i <= r; i++)
        if (isRevDiffDivisible(i, k))    
            count++;
    return count;
}
     
// Driver code
 
var l = 35, r = 45, k = 5;
document.write(countNumbers(l, r, k));
 
// This code contributed by Princi Singh
 
</script>


PHP




<?php
// PHP program to Count the
// numbers within a given
// range in which when you
// subtract a number from
// its reverse, the difference
// is a product of k
function isRevDiffDivisible($x, $k)
{
    // function to check if
    // the number and its
    // reverse have their
    // absolute difference
    // divisible by k
    $n = $x;
    $m = 0;
    $flag;
    while ($x > 0)
    {
        // reverse the number
        $m = $m * 10 + $x % 10;
        $x = (int)$x / 10;
    }
     
    return (abs($n - $m) %
                $k == 0);
}
 
function countNumbers($l, $r, $k)
{
    $count = 0;
    for ($i = $l; $i <= $r; $i++)
        if (isRevDiffDivisible($i, $k))
            ++$count;
    return $count;
}
 
// Driver code
$l = 20; $r = 23; $k = 6;
echo countNumbers($l, $r, $k);
 
// This code is contributed by mits.
?>


Output

2

Time Complexity: O(nlogn)
Auxiliary Space: O(1)

Approach#2: Using abs

The given approach is a Python function named “count_numbers” that takes three arguments, start, end, and k, and returns the count of numbers in the range [start, end] that satisfy a particular condition. The condition is that the absolute difference between a number and its reverse is divisible by k.

Algorithm

1. Initialize a variable “count” to 0 to store the count of numbers that satisfy the condition.
2. Use a for loop to iterate over all the numbers in the range [start, end].
3. For each number, compute the absolute difference between the number and its reverse by first converting the number to a string, reversing it, and then converting it back to an integer.
4. If the absolute difference is divisible by k, increment the count variable by 1.
5. After iterating over all the numbers in the range, return the count.

Python3




def count_numbers(start, end, k):
    count = 0
    for num in range(start, end+1):
        diff = abs(num - int(str(num)[::-1]))
        if diff % k == 0:
            count += 1
    return count
start = 35
end = 45
k = 5
print(count_numbers(start, end, k))


Javascript




function GFG(start, end, k) {
    let count = 0;
    // Iterate through numbers from 'start' to 'end'
    for (let num = start; num <= end; num++) {
        // Calculate the absolute difference between
        // 'num' and its reverse
        const diff = Math.abs(num - parseInt(num.toString().split('').reverse().join('')));
        // Check if the difference is divisible by 'k'
        if (diff % k === 0) {
            count++;
        }
    }
    return count;
}
const start = 35;
const end = 45;
const k = 5;
console.log(GFG(start, end, k));


Output

2

Time Complexity: O(NM), where N is the difference between the start and end, and M is the length of the maximum number in the range [start, end]. The reason for this time complexity is that for each number in the range, we need to convert it to a string, reverse it, and then convert it back to an integer. This requires M operations for each number. Therefore, the total number of operations is NM.

Space Complexity: O(M), where M is the length of the maximum number in the range [start, end]. The reason for this space complexity is that we need to convert each number in the range to a string, and the length of the string is at most M. Therefore, the total space required is N*M. However, since we only store one number at a time, the actual space used at any given time is O(M).

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Dominic
32352 POSTS0 COMMENTS
Milvus
87 POSTS0 COMMENTS
Nango Kala
6720 POSTS0 COMMENTS
Nicole Veronica
11885 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11941 POSTS0 COMMENTS
Shaida Kate Naidoo
6840 POSTS0 COMMENTS
Ted Musemwa
7105 POSTS0 COMMENTS
Thapelo Manthata
6795 POSTS0 COMMENTS
Umr Jansen
6795 POSTS0 COMMENTS