Related Articles

Related Articles

Possible two sets from first N natural numbers difference of sums as D
  • Difficulty Level : Hard
  • Last Updated : 26 Apr, 2018

Given N and D, find if it is possible to make two sets from first N natural numbers such that the difference between the sum of 2 sets(individually) is D.


Examples :

Input  : 5 7
Output : yes
Explanation: Keeping 1 and 3 in one set,
and 2, 4 and 5 are in other set.
Sum of set 1 = 4
Sum of set 2 = 11 
So, the difference D = 7 
Which is the required difference

Input  : 4 5
Output : no

Approach :

Let s1 and s2 be the two sets.
Here we know that
sum(s1) + sum(s2) = N*(N+1)/2 and
sum(s1) – sum(s2) = D

Adding above 2 equations, we get
2*sum(s1) = N*(N+1)/2 + D



If sum(S1) and sum(S2) are integers, then only we can split the first N natural numbers into two sets. For that N*(N+1)/2 + D must be an even number.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program for implementing 
// above approach
#include <bits/stdc++.h>
using namespace std;
  
// Function returns true if it is 
// possible to split into two
// sets otherwise returns false
bool check(int N, int D)
{    
    int temp = (N * (N + 1)) / 2 + D;
    return (temp % 2 == 0);
}
  
// Driver code
int main()
{
    int N = 5;
    int M = 7;
    if (check(N, M))
        cout << "yes";
    else
        cout << "no";
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program for implementing 
// above approach
  
class GFG
{
      
    // Function returns true if it is 
    // possible to split into two
    // sets otherwise returns false
    static boolean check(int N, int D)
    
        int temp = (N * (N + 1)) / 2 + D;
        return (temp % 2 == 0);
    }
      
    // Driver code
    static public void main (String args[])
    {
        int N = 5;
        int M = 7;
        if (check(N, M))
            System.out.println("yes");
        else
            System.out.println("no");
    }
}
  
// This code is contributed by Smitha.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program for implementing
# above approach
  
# Function returns true if it is
# possible to split into two
# sets otherwise returns false
def check(N, D):
    temp = N * (N + 1) // 2 + D
    return (bool(temp % 2 == 0))
  
# Driver code
N = 5
M = 7
if check(N, M):
    print("yes")
else:
    print("no")
  
# This code is contributed by Shrikant13.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program for implementing 
// above approach
using System;
  
class GFG
{
      
    // Function returns true if it is 
    // possible to split into two
    // sets otherwise returns false
    static bool check(int N, int D)
    
        int temp = (N * (N + 1)) / 2 + D;
        return (temp % 2 == 0);
    }
      
    // Driver code
    static public void Main ()
    {
        int N = 5;
        int M = 7;
        if (check(N, M))
            Console.Write("yes");
        else
            Console.Write("no");
    }
}
  
// This code is contributed by Ajit.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program for implementing 
// above approach
  
// Function returns true if it is 
// possible to split into two
// sets otherwise returns false
function check($N, $D)
    $temp = ($N * ($N + 1)) / 2 + $D;
    return ($temp % 2 == 0);
}
  
// Driver code
$N = 5;
$M = 7;
if (check($N, $M))
    echo("yes");
else
    echo("no");
  
// This code is contributed by Ajit.

chevron_right


OUTPUT :

yes

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Recommended Articles
Page :