# Find the repeating and the missing number using two equations

Given an array arr[] of size N, each integer from the range [1, N] appears exactly once except A which appears twice and B which is missing. The task is to find the numbers A and B.

Examples:

Input: arr[] = {1, 2, 2, 3, 4}
Output:
A = 2
B = 5

Input: arr[] = {5, 3, 4, 1, 1}
Output:
A = 1
B = 2

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: From the sum of first N natural numbers,

SumN = 1 + 2 + 3 + … + N = (N * (N + 1)) / 2
And, let the sum of all the array elements be Sum. Now,
SumN = Sum – A + B
A – B = Sum – SumN …(equation 1)

And from the sum of the squares of first N natural numbers,

SumSqN = 12 + 22 + 32 + … + N2 = (N * (N + 1) * (2 * n + 1)) / 6
And, let the sum of the squares of all the array elements be SumSq. Now,
SumSq = SumSqN + A2 – B2
SumSq – SumSqN = (A + B) * (A – B) …(equation 2)

Put value of (A – B) from equation 1 in equation 2,

SumSq – SumSqN = (A + B) * (Sum – SumN)
A + B = (SumSq – SumSqN) / (Sum – SumN) …(equation 3)

Solving equation 1 and equation 3 will give,

B = (((SumSq – SumSqN) / (Sum – SumN)) + SumN – Sum) / 2
And, A = Sum – SumN + B

Below is the implementation of the above approach:

## C++

 `//C++ implementation of the approach ` ` `  `#include ` `#include ` `#include ` ` `  `using` `namespace` `std; ` ` `  `    ``// Function to print the required numbers ` ` ``void` `findNumbers(``int` `arr[], ``int` `n) ` `    ``{ ` ` `  `        ``// Sum of first n natural numbers ` `        ``int` `sumN = (n * (n + 1)) / 2; ` ` `  `        ``// Sum of squares of first n natural numbers ` `        ``int` `sumSqN = (n * (n + 1) * (2 * n + 1)) / 6; ` ` `  `        ``// To store the sum and sum of squares ` `        ``// of the array elements ` `        ``int` `sum = 0, sumSq = 0, i; ` ` `  `        ``for` `(i = 0; i < n; i++) { ` `            ``sum += arr[i]; ` `            ``sumSq = sumSq + (``pow``(arr[i], 2)); ` `        ``} ` ` `  `        ``int` `B = (((sumSq - sumSqN) / (sum - sumN)) + sumN - sum) / 2; ` `        ``int` `A = sum - sumN + B; ` `         ``cout << ``"A = "` `; ` `         ``cout << A << endl; ` `         ``cout << ``"B = "` `; ` `         ``cout << B << endl; ` `    ``} ` ` `  `    ``// Driver code ` `int` `main() { ` `        ``int` `arr[] = { 1, 2, 2, 3, 4 }; ` `        ``int` `n = ``sizeof``(arr)/``sizeof``(arr); ` `        ``findNumbers(arr, n); ` `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach ` `public` `class` `GFG { ` ` `  `    ``// Function to print the required numbers ` `    ``static` `void` `findNumbers(``int` `arr[], ``int` `n) ` `    ``{ ` ` `  `        ``// Sum of first n natural numbers ` `        ``int` `sumN = (n * (n + ``1``)) / ``2``; ` ` `  `        ``// Sum of squares of first n natural numbers ` `        ``int` `sumSqN = (n * (n + ``1``) * (``2` `* n + ``1``)) / ``6``; ` ` `  `        ``// To store the sum and sum of squares ` `        ``// of the array elements ` `        ``int` `sum = ``0``, sumSq = ``0``, i; ` ` `  `        ``for` `(i = ``0``; i < n; i++) { ` `            ``sum += arr[i]; ` `            ``sumSq += Math.pow(arr[i], ``2``); ` `        ``} ` ` `  `        ``int` `B = (((sumSq - sumSqN) / (sum - sumN)) + sumN - sum) / ``2``; ` `        ``int` `A = sum - sumN + B; ` `        ``System.out.println(``"A = "` `+ A + ``"\nB = "` `+ B); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `arr[] = { ``1``, ``2``, ``2``, ``3``, ``4` `}; ` `        ``int` `n = arr.length; ` ` `  `        ``findNumbers(arr, n); ` `    ``} ` `} `

## Python3

 `# Python3 implementation of the approach ` ` `  `import` `math ` `# Function to print the required numbers ` `def` `findNumbers(arr, n): ` `     `  ` `  `        ``# Sum of first n natural numbers ` `        ``sumN ``=` `(n ``*` `(n ``+` `1``)) ``/` `2``; ` ` `  `        ``# Sum of squares of first n natural numbers ` `        ``sumSqN ``=` `(n ``*` `(n ``+` `1``) ``*` `(``2` `*` `n ``+` `1``)) ``/` `6``; ` ` `  `        ``# To store the sum and sum of squares ` `        ``# of the array elements ` `        ``sum` `=` `0``; ` `        ``sumSq ``=` `0``; ` ` `  `        ``for` `i ``in` `range``(``0``,n):  ` `            ``sum` `=` `sum` `+` `arr[i]; ` `            ``sumSq ``=` `sumSq ``+` `(math.``pow``(arr[i], ``2``)); ` `         `  ` `  `        ``B ``=` `(((sumSq ``-` `sumSqN) ``/` `(``sum` `-` `sumN)) ``+` `sumN ``-` `sum``) ``/` `2``; ` `        ``A ``=` `sum` `-` `sumN ``+` `B; ` `        ``print``(``"A = "``,``int``(A)) ; ` `        ``print``(``"B = "``,``int``(B)); ` `     `  ` `  `# Driver code ` ` `  `arr ``=` `[ ``1``, ``2``, ``2``, ``3``, ``4` `]; ` `n ``=` `len``(arr); ` `findNumbers(arr, n); ` ` `  `#This code is contributed by Shivi_Aggarwal     `

## C#

 `// C# implementation of the approach  ` `using` `System; ` `public` `class` `GFG {  ` ` `  `    ``// Function to print the required numbers  ` `    ``static` `void` `findNumbers(``int` `[]arr, ``int` `n)  ` `    ``{  ` ` `  `        ``// Sum of first n natural numbers  ` `        ``int` `sumN = (n * (n + 1)) / 2;  ` ` `  `        ``// Sum of squares of first n natural numbers  ` `        ``int` `sumSqN = (n * (n + 1) * (2 * n + 1)) / 6;  ` ` `  `        ``// To store the sum and sum of squares  ` `        ``// of the array elements  ` `        ``int` `sum = 0, sumSq = 0, i;  ` ` `  `        ``for` `(i = 0; i < n; i++) {  ` `            ``sum += arr[i];  ` `            ``sumSq += (``int``)Math.Pow(arr[i], 2);  ` `        ``}  ` ` `  `        ``int` `B = (((sumSq - sumSqN) / (sum - sumN)) + sumN - sum) / 2;  ` `        ``int` `A = sum - sumN + B;  ` `        ``Console.WriteLine(``"A = "` `+ A + ``"\nB = "` `+ B);  ` `    ``}  ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `Main()  ` `    ``{  ` `        ``int` `[]arr = { 1, 2, 2, 3, 4 };  ` `        ``int` `n = arr.Length;  ` ` `  `        ``findNumbers(arr, n);  ` `    ``}  ` `}  ` `// This code is contributed by PrinciRaj1992 `

## PHP

 ` `

Output:

```A = 2
B = 5
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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.