Skip to content
Related Articles
Find the repeating and the missing number using two equations
• Difficulty Level : Medium
• Last Updated : 15 Apr, 2021

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

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

 ``

## Javascript

 ``
Output:
```A = 2
B = 5```

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 industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up