Possible two sets from first N natural numbers difference of sums as D

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


My Personal Notes arrow_drop_up

pawanasipugmailcom

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.