Skip to content
Related Articles

Related Articles

Sum of all numbers in the given range which are divisible by M
  • Difficulty Level : Medium
  • Last Updated : 09 Apr, 2021

Given three numbers A, B and M such that A < B, the task is to find the sum of numbers divisible by M in the range [A, B].

Examples: 

Input: A = 25, B = 100, M = 30 
Output: 180 
Explanation: 
In the given range [25, 100] 30, 60 and 90 are the numbers which are divisible by M = 30 
Therefore, sum of these numbers = 180.

Input: A = 6, B = 15, M = 3 
Output: 42 
Explanation: 
In the given range [6, 15] 6, 9, 12 and 15 are the numbers which are divisible by M = 3. 
Therefore, sum of these numbers = 42. 
 

Naive Approach: Check for each number in the range [A, B] if they are divisible by M or not. And finally, add all the numbers that are divisible by M.



Below is the implementation of the above approach: 

C++




// C++ program to find the sum of numbers
// divisible by M in the given range
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the sum of numbers
// divisible by M in the given range
int sumDivisibles(int A, int B, int M)
{
    // Variable to store the sum
    int sum = 0;
 
    // Running a loop from A to B and check
    // if a number is divisible by i.
    for (int i = A; i <= B; i++)
 
        // If the number is divisible,
        // then add it to sum
        if (i % M == 0)
            sum += i;
 
    // Return the sum
    return sum;
}
 
// Driver code
int main()
{
    // A and B define the range
    // M is the dividend
    int A = 6, B = 15, M = 3;
 
    // Printing the result
    cout << sumDivisibles(A, B, M) << endl;
 
    return 0;
}

Java




// Java program to find the sum of numbers
// divisible by M in the given range
import java.util.*;
 
class GFG{
  
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
    // Variable to store the sum
    int sum = 0;
  
    // Running a loop from A to B and check
    // if a number is divisible by i.
    for (int i = A; i <= B; i++)
  
        // If the number is divisible,
        // then add it to sum
        if (i % M == 0)
            sum += i;
  
    // Return the sum
    return sum;
}
  
// Driver code
public static void main(String[] args)
{
    // A and B define the range
    // M is the dividend
    int A = 6, B = 15, M = 3;
  
    // Printing the result
    System.out.print(sumDivisibles(A, B, M) +"\n");
}
}
 
// This code is contributed by 29AjayKumar

Python3




# Python 3 program to find the sum of numbers
# divisible by M in the given range
 
# Function to find the sum of numbers
# divisible by M in the given range
def sumDivisibles(A, B, M):
 
    # Variable to store the sum
    sum = 0
 
    # Running a loop from A to B and check
    # if a number is divisible by i.
    for i in range(A, B + 1):
 
        # If the number is divisible,
        # then add it to sum
        if (i % M == 0):
            sum += i
 
    # Return the sum
    return sum
 
# Driver code
if __name__=="__main__":
     
    # A and B define the range
    # M is the dividend
    A = 6
    B = 15
    M = 3
 
    # Printing the result
    print(sumDivisibles(A, B, M))
     
# This code is contributed by chitranayal

C#




// C# program to find the sum of numbers
// divisible by M in the given range
using System;
 
class GFG{
   
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
    // Variable to store the sum
    int sum = 0;
   
    // Running a loop from A to B and check
    // if a number is divisible by i.
    for (int i = A; i <= B; i++)
   
        // If the number is divisible,
        // then add it to sum
        if (i % M == 0)
            sum += i;
   
    // Return the sum
    return sum;
}
   
// Driver code
public static void Main(String[] args)
{
    // A and B define the range
    // M is the dividend
    int A = 6, B = 15, M = 3;
   
    // Printing the result
    Console.Write(sumDivisibles(A, B, M) +"\n");
}
}
  
// This code is contributed by sapnasingh4991

Javascript




<script>
 
// Javascript program to find the sum of numbers
// divisible by M in the given range
 
// Function to find the sum of numbers
// divisible by M in the given range
function sumDivisibles(A, B, M)
{
     
    // Variable to store the sum
    var sum = 0;
 
    // Running a loop from A to B and check
    // if a number is divisible by i.
    for(var i = A; i <= B; i++)
     
        // If the number is divisible,
        // then add it to sum
        if (i % M == 0)
            sum += i;
 
    // Return the sum
    return sum;
}
 
// Driver code
 
// A and B define the range
// M is the dividend
var A = 6, B = 15, M = 3;
 
// Printing the result
document.write(sumDivisibles(A, B, M));
 
// This code is contributed by rrrtnx
 
</script>
Output: 
42

 

Time Complexity: O(N).
Efficient Approach: The idea is to use the concept of Arithmetic Progression and divisibility. 

  • Upon visualization, the multiples of M can be seen to form a series 
M, 2M, 3M, ...
  • If we can find the value of K which is the first term in the range [A, B] which is divisible by M, then directly, the series would be: 
K, (K + M), (K + 2M), ------  (K + (N - 1)*M )
where N is the number of elements in the series. 
N = B / M - (A - 1)/ M
  • Therefore, the sum of the elements can be found out by: 
sum = N * ( (first term + last term) / 2)

Below is the implementation of the above approach: 

C++




// C++ program to find the sum of numbers
// divisible by M in the given range
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the largest number
// smaller than or equal to N
// that is divisible by K
int findSmallNum(int N, int K)
{
    // Finding the remainder when N is
    // divided by K
    int rem = N % K;
 
    // If the remainder is 0, then the
    // number itself is divisible by K
    if (rem == 0)
        return N;
    else
 
        // Else, then the difference between
        // N and remainder is the largest number
        // which is divisible by K
        return N - rem;
}
 
// Function to find the smallest number
// greater than or equal to N
// that is divisible by K
int findLargeNum(int N, int K)
{
    // Finding the remainder when N is
    // divided by K
    int rem = (N + K) % K;
 
    // If the remainder is 0, then the
    // number itself is divisible by K
    if (rem == 0)
        return N;
    else
 
        // Else, then the difference between
        // N and remainder is the largest number
        // which is divisible by K
        return N + K - rem;
}
 
// Function to find the sum of numbers
// divisible by M in the given range
int sumDivisibles(int A, int B, int M)
{
    // Variable to store the sum
    int sum = 0;
    int first = findSmallNum(A, M);
    int last = findLargeNum(B, M);
 
    // To bring the smallest and largest
    // numbers in the range [A, B]
    if (first < A)
        first += M;
 
    if (last > B)
        first -= M;
 
    // To count the number of terms in the AP
    int n = (B / M) - (A - 1) / M;
 
    // Sum of n terms of an AP
    return n * (first + last) / 2;
}
 
// Driver code
int main()
{
    // A and B define the range,
    // M is the dividend
    int A = 6, B = 15, M = 3;
 
    // Printing the result
    cout << sumDivisibles(A, B, M);
 
    return 0;
}

Java




// Java program to find the sum of numbers
// divisible by M in the given range
 
 
class GFG{
  
// Function to find the largest number
// smaller than or equal to N
// that is divisible by K
static int findSmallNum(int N, int K)
{
    // Finding the remainder when N is
    // divided by K
    int rem = N % K;
  
    // If the remainder is 0, then the
    // number itself is divisible by K
    if (rem == 0)
        return N;
    else
  
        // Else, then the difference between
        // N and remainder is the largest number
        // which is divisible by K
        return N - rem;
}
  
// Function to find the smallest number
// greater than or equal to N
// that is divisible by K
static int findLargeNum(int N, int K)
{
    // Finding the remainder when N is
    // divided by K
    int rem = (N + K) % K;
  
    // If the remainder is 0, then the
    // number itself is divisible by K
    if (rem == 0)
        return N;
    else
  
        // Else, then the difference between
        // N and remainder is the largest number
        // which is divisible by K
        return N + K - rem;
}
  
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
    // Variable to store the sum
    int first = findSmallNum(A, M);
    int last = findLargeNum(B, M);
  
    // To bring the smallest and largest
    // numbers in the range [A, B]
    if (first < A)
        first += M;
  
    if (last > B)
        first -= M;
  
    // To count the number of terms in the AP
    int n = (B / M) - (A - 1) / M;
  
    // Sum of n terms of an AP
    return n * (first + last) / 2;
}
  
// Driver code
public static void main(String[] args)
{
    // A and B define the range,
    // M is the dividend
    int A = 6, B = 15, M = 3;
  
    // Printing the result
    System.out.print(sumDivisibles(A, B, M));
  
}
}
 
// This code contributed by Princi Singh

Python3




# Python3 program to find the sum of numbers
# divisible by M in the given range
 
# Function to find the largest number
# smaller than or equal to N
# that is divisible by K
def findSmallNum(N, K):
     
    # Finding the remainder when N is
    # divided by K
    rem = N % K
 
    # If the remainder is 0, then the
    # number itself is divisible by K
    if (rem == 0):
        return N
    else:
        # Else, then the difference between
        # N and remainder is the largest number
        # which is divisible by K
        return N - rem
 
# Function to find the smallest number
# greater than or equal to N
# that is divisible by K
def findLargeNum(N, K):
     
    # Finding the remainder when N is
    # divided by K
    rem = (N + K) % K
 
    # If the remainder is 0, then the
    # number itself is divisible by K
    if (rem == 0):
        return N
    else:
        # Else, then the difference between
        # N and remainder is the largest number
        # which is divisible by K
        return N + K - rem
 
# Function to find the sum of numbers
# divisible by M in the given range
def sumDivisibles(A, B, M):
     
    # Variable to store the sum
    sum = 0
    first = findSmallNum(A, M)
    last = findLargeNum(B, M)
 
    # To bring the smallest and largest
    # numbers in the range [A, B]
    if (first < A):
        first += M
 
    if (last > B):
        first -= M
 
    # To count the number of terms in the AP
    n = (B // M) - (A - 1) // M
 
    # Sum of n terms of an AP
    return n * (first + last) // 2
 
# Driver code
if __name__ == '__main__':
     
    # A and B define the range,
    # M is the dividend
    A = 6
    B = 15
    M = 3
 
    # Printing the result
    print(sumDivisibles(A, B, M))
 
# This code is contributed by Surendra_Gangwar

C#




// C# program to find the sum of numbers
// divisible by M in the given range
using System;
using System.Collections.Generic;
 
class GFG{
   
// Function to find the largest number
// smaller than or equal to N
// that is divisible by K
static int findSmallNum(int N, int K)
{
    // Finding the remainder when N is
    // divided by K
    int rem = N % K;
   
    // If the remainder is 0, then the
    // number itself is divisible by K
    if (rem == 0)
        return N;
    else
   
        // Else, then the difference between
        // N and remainder is the largest number
        // which is divisible by K
        return N - rem;
}
   
// Function to find the smallest number
// greater than or equal to N
// that is divisible by K
static int findLargeNum(int N, int K)
{
    // Finding the remainder when N is
    // divided by K
    int rem = (N + K) % K;
   
    // If the remainder is 0, then the
    // number itself is divisible by K
    if (rem == 0)
        return N;
    else
   
        // Else, then the difference between
        // N and remainder is the largest number
        // which is divisible by K
        return N + K - rem;
}
   
// Function to find the sum of numbers
// divisible by M in the given range
static int sumDivisibles(int A, int B, int M)
{
    // Variable to store the sum
    int first = findSmallNum(A, M);
    int last = findLargeNum(B, M);
   
    // To bring the smallest and largest
    // numbers in the range [A, B]
    if (first < A)
        first += M;
   
    if (last > B)
        first -= M;
   
    // To count the number of terms in the AP
    int n = (B / M) - (A - 1) / M;
   
    // Sum of n terms of an AP
    return n * (first + last) / 2;
}
   
// Driver code
public static void Main(String[] args)
{
    // A and B define the range,
    // M is the dividend
    int A = 6, B = 15, M = 3;
   
    // Printing the result
    Console.Write(sumDivisibles(A, B, M));
   
}
}
  
// This code is contributed by Rajput-Ji
Output: 
42

 

Time Complexity: O(1).
 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :