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 (X*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/(X*Y) and the sum will be:
Hence, S2 = ((N/(X*Y))/2) * (2 * Y + (N/(X*Y) - 1) * (X*Y))
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 <bits/stdc++.h> using namespace std; // 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 / (X * Y))) * (2 * (X * Y) + (N / (X * Y) - 1) * (X * Y))/ 2; return S1 + S2 - S3; } // Driver code int main() { int N = 14; int X = 3, Y = 5; 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{ // 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 / (X * Y))) * ( 2 * (X * Y) + (N / (X * Y) - 1 ) * (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 # 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 / (X * Y))) * floor ( 2 * (X * Y) + floor(N / (X * Y) - 1 ) * (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{ // 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 / (X * Y))) * (2 * (X * Y) + (N / (X * Y) - 1) * (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
<?php // PHP program to find sum of numbers from // 1 to N which are divisible by X or Y // Function to calculate the sum // of numbers divisible by X or Y function sum( $N , $X , $Y ) { $S1 ; $S2 ; $S3 ; $S1 = floor (((int) $N / $X )) * (2 * $X + (int)((int) $N / $X - 1) * $X ) / 2; $S2 = floor (((int) $N / $Y )) * (2 * $Y + (int)((int) $N / $Y - 1) * $Y ) / 2; $S3 = floor (((int) $N / ( $X * $Y ))) * (2 * ( $X * $Y ) + ((int) $N / ( $X * $Y ) - 1) * (int)( $X * $Y ))/ 2; return ceil ( $S1 + ( $S2 - $S3 )); } // Driver code $N = 14; $X = 3; $Y = 5; echo sum( $N , $X , $Y ); #This code is contributed by ajit. ?> |
Javascript
<script> // javascript program to find sum of numbers from // 1 to N which are divisible by X or Y // Function to calculate the sum // of numbers divisible by X or Y function sum(N , X , Y) { var S1, S2, S3; S1 = (parseInt(N / X)) * (2 * X + parseInt(N / X - 1) * X) / 2; S2 = (parseInt(N / Y)) * (2 * Y + parseInt(N / Y - 1) * Y) / 2; S3 = (parseInt(N / (X * Y))) * (2 * (X * Y) + parseInt(N / (X * Y) - 1) * (X * Y))/ 2; return S1 + S2 - S3; } // Driver code var N = 14; var X = 3, Y = 5; document.write(sum(N, X, Y)); // This code is contributed by Princi Singh </script> |
C
// C program to find sum of numbers from // 1 to N which are divisible by X or Y #include <stdio.h> // 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 / (X * Y))) * (2 * (X * Y) + (N / (X * Y) - 1) * (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; } |
45
Time Complexity : O(1)