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

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

 `

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.

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 :