GeeksforGeeks App
Open App
Browser
Continue

# Sum of first N natural numbers which are divisible by X or Y

Given a number N. Given two numbers X and Y, the task is to find the sum of all those numbers from 1 to N that are divisible by X or by Y.
Examples

Input : N = 20
Output : 98

Input : N = 14
Output : 45

Approach: To solve the problem, follow the below steps:
->Find the sum of numbers that are divisible by X upto N. Denote it by S1.
->Find the sum of numbers that are divisible by Y upto N. Denote it by S2.
->Find the sum of numbers that are divisible by both X and Y upto N. Denote it by S3.
->The final answer will be S1 + S2 – S3.
In order to find the sum, we can use the general formula of A.P. which is:

`Sn = (n/2) * {2*a + (n-1)*d}`

For S1: The total numbers that will be divisible by X upto N will be N/X and the sum will be:

```Hence,
S1 = ((N/X)/2) * (2 * X + (N/X - 1) * X)```

For S2: The total numbers that will be divisible by Y upto N will be N/Y and the sum will be:

```Hence,
S2 = ((N/Y)/2) * (2 * Y + (N/Y - 1) * Y)```

For S3: The total numbers that will be divisible by both X and Y upto N will be N/lcm(X, Y) and the sum will be:

```Hence,
S2 = ((N/lcm(X, Y))/2) * ((2 * lcm(X,Y)) + (N/lcm(X,Y) - 1) * lcm(X,Y))/2```

Therefore, the result will be:

`S = S1 + S2 - S3`

Below is the implementation of the above approach:

## C++

 `// C++ program to find sum of numbers from``// 1 to N which are divisible by X or Y``#include ``using` `namespace` `std;` `int` `gcd(``int` `a, ``int` `b)``{``    ``if` `(a == 0)``        ``return` `b;``    ``return` `gcd(b % a, a);``}`` ` `// Function to return LCM of two numbers``int` `lcm(``int` `a, ``int` `b)``{``    ``return` `(a / gcd(a, b)) * b;``}` `// Function to calculate the sum``// of numbers divisible by X or Y``int` `sum(``int` `N, ``int` `X, ``int` `Y)``{``    ``int` `S1, S2, S3;` `    ``S1 = ((N / X)) * (2 * X + (N / X - 1) * X) / 2;``    ``S2 = ((N / Y)) * (2 * Y + (N / Y - 1) * Y) / 2;``    ``S3 = ((N / lcm(X,Y))) * (2 * (lcm(X,Y))``                      ``+ (N / (lcm(X,Y)) - 1) * (lcm(X,Y)))/ 2;` `    ``return` `S1 + S2 - S3;``}` `// Driver code``int` `main()``{``    ``int` `N = 24;``    ``int` `X = 4, Y = 6;` `    ``cout << sum(N, X, Y);` `    ``return` `0;``}`

## Java

 `// Java program to find sum of numbers from``// 1 to N which are divisible by X or Y` `public` `class` `GFG{``    ` `   ``static` `int` `gcd(``int` `a, ``int` `b)``    ``{``        ``if` `(a == ``0``)``            ``return` `b;``        ``return` `gcd(b % a, a);``    ``}``     ` `    ``// method to return LCM of two numbers``    ``static` `int` `lcm(``int` `a, ``int` `b)``    ``{``        ``return` `(a / gcd(a, b)) * b;``    ``}``     ` `  ` `    ``// Function to calculate the sum``    ``// of numbers divisible by X or Y``    ``static` `int` `sum(``int` `N, ``int` `X, ``int` `Y)``    ``{``        ``int` `S1, S2, S3;``    ` `        ``S1 = ((N / X)) * (``2` `* X + (N / X - ``1``) * X) / ``2``;``        ``S2 = ((N / Y)) * (``2` `* Y + (N / Y - ``1``) * Y) / ``2``;``        ``S3 = ((N / ( lcm(X, Y)))) * (``2` `* ( lcm(X, Y))``                          ``+ (N / ( lcm(X, Y)) - ``1``) * ( lcm(X, Y)))/ ``2``;``    ` `        ``return` `S1 + S2 - S3;``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `main(String []args)``    ``{``        ``int` `N = ``14``;``        ``int` `X = ``3``, Y = ``5``;``    ` `        ``System.out.println(sum(N, X, Y));``    ` `    ``}``    ``// This code is contributed by Ryuga``}`

## Python3

 `# Python 3 program to find sum of numbers from``# 1 to N which are divisible by X or Y``from` `math ``import` `ceil, floor` `def` `gcd(a,b):``    ``if` `a ``=``=` `0``:``        ``return` `b``    ``return` `gcd(b ``%` `a, a)``  ` `def` `lcm(a,b):``    ``return` `(a ``/` `gcd(a,b))``*` `b``  ` `# Function to calculate the sum``# of numbers divisible by X or Y``def` `sum``(N, X, Y):``    ``S1 ``=` `floor(floor(N ``/` `X) ``*` `floor(``2` `*` `X ``+``               ``floor(N ``/` `X ``-` `1``) ``*` `X) ``/` `2``)``    ``S2 ``=` `floor(floor(N ``/` `Y)) ``*` `floor(``2` `*` `Y ``+``               ``floor(N ``/` `Y ``-` `1``) ``*` `Y) ``/` `2``    ``S3 ``=` `floor(floor(N ``/` `(lcm(X,Y)))) ``*` `floor (``2` `*` `(lcm(X,Y)) ``+``               ``floor(N ``/` `(lcm(X,Y)) ``-` `1``) ``*` `(lcm(X,Y)))``/` `2` `    ``return` `S1 ``+` `S2 ``-` `S3` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``N ``=` `14``    ``X ``=` `3``    ``Y ``=` `5` `    ``print``(``int``(``sum``(N, X, Y)))` `# This code is contributed by``# Surendra_Gangwar`

## C#

 `// C# program to find sum of numbers from``// 1 to N which are divisible by X or Y`` ` `using` `System;``public` `class` `GFG{``  ` `    ``static` `int` `gcd(``int` `a, ``int` `b)``    ``{``        ``if` `(a == 0)``            ``return` `b;``        ``return` `gcd(b % a, a);``    ``}``     ` `    ``// method to return``    ``// LCM of two numbers``    ``static` `int` `lcm(``int` `a, ``int` `b)``    ``{``        ``return` `(a / gcd(a, b)) * b;``    ``}``     ` `    ``// Function to calculate the sum``    ``// of numbers divisible by X or Y``    ``static` `int` `sum(``int` `N, ``int` `X, ``int` `Y)``    ``{``        ``int` `S1, S2, S3;``     ` `        ``S1 = ((N / X)) * (2 * X + (N / X - 1) * X) / 2;``        ``S2 = ((N / Y)) * (2 * Y + (N / Y - 1) * Y) / 2;``        ``S3 = ((N / (lcm(X, Y)))) * (2 * (lcm(X, Y))``                          ``+ (N / (lcm(X, Y)) - 1) * (lcm(X, Y)))/ 2;``     ` `        ``return` `S1 + S2 - S3;``    ``}``     ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `N = 14;``        ``int` `X = 3, Y = 5;``     ` `        ``Console.Write(sum(N, X, Y));``     ` `    ``}``    ` `}`

## PHP

 ``

## Javascript

 ``

## C

 `// C program to find sum of numbers from``// 1 to N which are divisible by X or Y``#include ` `int` `gcd(``int` `a, ``int` `b)``{``    ``if` `(a == 0)``        ``return` `b;``    ``return` `gcd(b % a, a);``}`` ` `// Function to return LCM of two numbers``int` `lcm(``int` `a, ``int` `b)``{``    ``return` `(a / gcd(a, b)) * b;``}` `// Function to calculate the sum``// of numbers divisible by X or Y``int` `sum(``int` `N, ``int` `X, ``int` `Y)``{``    ``int` `S1, S2, S3;` `    ``S1 = ((N / X)) * (2 * X + (N / X - 1) * X) / 2;``    ``S2 = ((N / Y)) * (2 * Y + (N / Y - 1) * Y) / 2;``    ``S3 = ((N / (lcm(X, Y)))) * (2 * (lcm(X, Y)) + (N / (lcm(X, Y)) - 1) * (lcm(X, Y)))/ 2;``    ``return` `S1 + S2 - S3;``}` `// Driver code``int` `main()``{``    ``int` `N = 14;``    ``int` `X = 3, Y = 5;``    ``printf``(``"%d "``,sum(N, X, Y));``    ``return` `0;``}`

Output

`108`

Time Complexity: O(log(min(X,Y)), for calculating gcd
Auxiliary Space: O(log(min(X,Y))

My Personal Notes arrow_drop_up