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

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

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 N``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 code``int` `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 approach``import` `java.io.*;` `class` `GFG``{` `// Function to find the ``// value of N``static` `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 code``public` `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 N ``def` `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 7 ``k ``=` `7` `res ``=` `findN(k) ``if` `(res ``=``=` `-``1``): ``    ``print``(``"Not possible"``) ``else``:``    ``print``(res)` `# This code is contributed``# by Smitha`

## C#

 `// C# implementation of``// above approach``using` `System;` `class` `GFG``{` `// Function to find the ``// value of N``static` `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 code``public` `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`

## PHP

 ``

## Javascript

 ``

Output:
`6`

Time Complexity: O(1)

Auxiliary Space: O(1)

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

Previous
Next