Given two numbers N and K, the task is to find the sum of first K numbers which are not divisible by N.
Examples:
Input: N = 5, K = 10
Output: 63
Explanation: Sum of { 1, 2, 3, 4, 6, 7, 8, 9, 11, 12 } is 63.
Input: N = 3, k = 13
Output: 127
Explanation: Sum of { 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19 } is 127.
Approach: In order to solve this problem, we need to follow the following steps:
- Calculate the last multiple of N by (K / (N – 1)) * N
- Calculate K%(N – 1). If the remainder is 0, (K / (N – 1)) * N – 1 gives the last value which is not divisible by N. Otherwise, we need to add the remainder to (K / (N – 1)) * N.
- Calculate the sum up to the last value which is not divisible by N obtained in the above step.
- Calculate the sum of multiples of N and subtract from the sum calculated in the above step to get the desired result.
Below code is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int findSum( int n, int k)
{
int val = (k / (n - 1)) * n;
int rem = k % (n - 1);
if (rem == 0) {
val = val - 1;
}
else {
val = val + rem;
}
int sum = (val * (val + 1)) / 2;
int x = k / (n - 1);
int sum_of_multiples
= (x
* (x + 1) * n)
/ 2;
sum -= sum_of_multiples;
return sum;
}
int main()
{
int n = 7, k = 13;
cout << findSum(n, k)
<< endl;
}
|
Java
import java.util.*;
class GFG {
static int findSum( int n, int k)
{
int val = (k / (n - 1 )) * n;
int rem = k % (n - 1 );
if (rem == 0 )
{
val = val - 1 ;
}
else
{
val = val + rem;
}
int sum = (val * (val + 1 )) / 2 ;
int x = k / (n - 1 );
int sum_of_multiples = (x * (x + 1 ) * n) / 2 ;
sum -= sum_of_multiples;
return sum;
}
public static void main(String[] args)
{
int n = 7 , k = 13 ;
System.out.println(findSum(n, k));
}
}
|
Python3
def findSum(n, k):
val = (k / / (n - 1 )) * n;
rem = k % (n - 1 );
if (rem = = 0 ):
val = val - 1 ;
else :
val = val + rem;
sum = (val * (val + 1 )) / / 2 ;
x = k / / (n - 1 );
sum_of_multiples = (x * (x + 1 ) * n) / / 2 ;
sum - = sum_of_multiples;
return sum ;
n = 7 ; k = 13 ;
print (findSum(n, k))
|
C#
using System;
class GFG{
static int findSum( int n, int k)
{
int val = (k / (n - 1)) * n;
int rem = k % (n - 1);
if (rem == 0)
{
val = val - 1;
}
else
{
val = val + rem;
}
int sum = (val * (val + 1)) / 2;
int x = k / (n - 1);
int sum_of_multiples = (x * (x + 1) * n) / 2;
sum -= sum_of_multiples;
return sum;
}
public static void Main(String[] args)
{
int n = 7, k = 13;
Console.WriteLine(findSum(n, k));
}
}
|
Javascript
<script>
function findSum(n, k)
{
var val = parseInt(k / (n - 1)) * n;
var rem = k % (n - 1);
if (rem == 0)
{
val = val - 1;
}
else
{
val = val + rem;
}
var sum = parseInt((val * (val + 1)) / 2);
var x = parseInt(k / (n - 1));
var sum_of_multiples = parseInt(
(x * (x + 1) * n) / 2);
sum -= sum_of_multiples;
return sum;
}
var n = 7, k = 13;
document.write(findSum(n, k))
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Another Approach:
1. Initialize a variable sum to 0 to keep track of the sum of the numbers.
2. Initialize a counter variable count to 0 to keep track of the number of non-divisible numbers found so far.
3. Initialize a variable i to 1 to start iterating from the first positive integer.
4. Repeat the following steps until count reaches K:
a. Check if i is divisible by N. If it is, increment i and continue to the next iteration.
b. If i is not divisible by N, add it to sum and increment count.
c. Increment i to check the next positive integer.
Once count reaches K, sum will contain the sum of the first K numbers which are not divisible by N.
C
#include <stdio.h>
int main() {
int K = 5;
int N = 2;
int sum = 0;
int count = 0;
int i = 1;
while (count < K) {
if (i % N == 0) {
i++;
continue ;
}
sum += i;
count++;
i++;
}
printf ( "Sum of first %d numbers not divisible by %d: %d\n" , K, N, sum);
return 0;
}
|
C++
#include <iostream>
using namespace std;
int main() {
int K = 5;
int N = 2;
int sum = 0;
int count = 0;
int i = 1;
while (count < K) {
if (i % N == 0) {
i++;
continue ;
}
sum += i;
count++;
i++;
}
cout << "Sum of first " << K << " numbers not divisible by " << N << ": " << sum << endl;
return 0;
}
|
Java
import java.util.*;
class Main {
public static void main(String[] args)
{
int K = 5 ;
int N = 2 ;
int sum = 0 ;
int count = 0 ;
int i = 1 ;
while (count < K) {
if (i % N == 0 ) {
i++;
continue ;
}
sum += i;
count++;
i++;
}
System.out.println( "Sum of first " + K
+ " numbers not divisible by "
+ N + ": " + sum);
}
}
|
Python3
K = 5
N = 2
sum = 0
count = 0
i = 1
while count < K:
if i % N = = 0 :
i + = 1
continue
sum + = i
count + = 1
i + = 1
print ( "Sum of first" , K, "numbers not divisible by" , N, ":" , sum )
|
C#
using System;
class GFG {
public static void Main( string [] args)
{
int K = 5;
int N = 2;
int sum = 0;
int count = 0;
int i = 1;
while (count < K) {
if (i % N == 0) {
i++;
continue ;
}
sum += i;
count++;
i++;
}
Console.Write( "Sum of first " + K
+ " numbers not divisible by "
+ N + ": " + sum);
}
}
|
Javascript
let K = 5;
let N = 2;
let sum = 0;
let count = 0;
let i = 1;
while (count < K) {
if (i % N == 0) {
i++;
continue ;
}
sum += i;
count++;
i++;
}
console.log( "Sum of first " + K + " numbers not divisible by " + N + " : " + sum);
|
OutputSum of first 5 numbers not divisible by 2: 25
Time Complexity: O(K) where K is the number of non-divisible numbers to find.
Auxiliary Space: O(1) since we only need to store a few variables.
Please Login to comment...