# Minimum value of N such that xor from 1 to N is equal to K

• Difficulty Level : Hard
• Last Updated : 22 Mar, 2021

Given a value K which is the XOR of all the values from 1 to N, the task is to find the minimum value of N such that XOR from 1 to N is equal to K.
Examples

Input: K = 7
Output: 6
1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 = 7

Input: K = 10
Output: Not Possible

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Approach: This problem is similar to the Calculate XOR from 1 to n. Below are the conditions to be checked:

1. If k = 0, then N = 3.
2. If k = 1, then N = 1.
3. If k % 4 = 0, then N = k.
4. If k % 4 = 3, then N = k-1.

Below is the implementation of above approach:

## C++

 // C++ implementation of above approach#include using namespace std; // Function to find the value of Nint findN(int k){         // variable to store the result    int ans;     // handling case for '0'    if (k == 0)        ans = 3;     // handling case for '1'    if (k == 1)        ans = 1;     // when number is completely divided by    // 4 then minimum 'x' will be 'k'    else if (k % 4 == 0)        ans = k;     // when number divided by 4 gives 3 as    // remainder then minimum 'x' will be 'k-1'    else if (k % 4 == 3)        ans = k - 1;     // else it is not possible to get    // k for any value of x    else        ans = -1;     return ans;} // Driver codeint main(){    // let the given number be 7    int k = 7;     int res = findN(k);    if (res == -1)        cout << "Not possible";    else        cout << res;     return 0;}

## Java

 // Java implementation of// above approachimport java.io.*; class GFG{ // Function to find the// value of Nstatic int findN(int k){         // variable to store    // the result    int ans;     // handling case for '0'    if (k == 0)        ans = 3;     // handling case for '1'    if (k == 1)        ans = 1;     // when number is completely    // divided by 4 then minimum    // 'x' will be 'k'    else if (k % 4 == 0)        ans = k;     // when number divided by 4    // gives 3 as remainder then    // minimum 'x' will be 'k-1'    else if (k % 4 == 3)        ans = k - 1;     // else it is not possible to    // get k for any value of x    else        ans = -1;     return ans;} // Driver codepublic static void main (String[] args){    // let the given number be 7    int k = 7;         int res = findN(k);    if (res == -1)        System.out.println("Not possible");    else        System.out.println(res);}} // This code is contributed// by inder_verma

## Python3

 # Python3 implementation of# above approach # Function to find the value of Ndef findN(k) :     # handling case for '0'    if (k == 0) :        ans = 3     # handling case for '1'    if (k == 1) :        ans = 1     # when number is completely    # divided by 4 then minimum    # 'x' will be 'k'    elif (k % 4 == 0) :        ans = k     # when number divided by 4    # gives 3 as remainder then    # minimum 'x' will be 'k-1'    elif (k % 4 == 3) :        ans = k - 1     # else it is not possible to     # get k for any value of x    else:        ans = -1     return ans # Driver code # let the given number be 7k = 7 res = findN(k)if (res == -1):    print("Not possible")else:    print(res) # This code is contributed# by Smitha

## C#

 // C# implementation of// above approachusing System; class GFG{ // Function to find the// value of Nstatic int findN(int k){         // variable to store    // the result    int ans;     // handling case for '0'    if (k == 0)        ans = 3;     // handling case for '1'    if (k == 1)        ans = 1;     // when number is completely    // divided by 4 then minimum    // 'x' will be 'k'    else if (k % 4 == 0)        ans = k;     // when number divided by 4    // gives 3 as remainder then    // minimum 'x' will be 'k-1'    else if (k % 4 == 3)        ans = k - 1;     // else it is not possible to    // get k for any value of x    else        ans = -1;     return ans;} // Driver codepublic static void Main (){    // let the given number be 7    int k = 7;         int res = findN(k);    if (res == -1)        Console.WriteLine("Not possible");    else        Console.WriteLine(res);}} // This code is contributed// by inder_verma



## Javascript


Output:
6

How does this work?
When we do XOR of numbers, we get 0 as XOR value just before a multiple of 4. This keeps repeating before every multiple of 4.

Number Binary-Repr  XOR-from-1-to-n
1         1           [0001]
2        10           [0011]
3        11           [0000]  <----- We get a 0
4       100           [0100]  <----- Equals to n
5       101           [0001]
6       110           [0111]
7       111           [0000]  <----- We get 0
8      1000           [1000]  <----- Equals to n
9      1001           [0001]
10     1010           [1011]
11     1011           [0000] <------ We get 0
12     1100           [1100] <------ Equals to n

My Personal Notes arrow_drop_up