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) = DAdding 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 <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; } |
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
<?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. |
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.