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++

 // C++ program for implementing  // above approach #include 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; }

Java

 // 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.

Python3

 # 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.

C#

 // 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.

PHP



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.