 Open in App
Not now

# Sum of all numbers in the given range which are divisible by M

• Difficulty Level : Medium
• Last Updated : 03 Jan, 2023

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 ``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

 ``

Output:

`42`

Time Complexity: O(B-A).
Auxiliary Space: O(1)

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 ``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`

## Javascript

 ``

Output:

`42`

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

My Personal Notes arrow_drop_up