# Find an integer X which is divisor of all except exactly one element in an array

Given an array of integers. Find an integer X which is the divisor of all except for exactly one element in the given array.

Note: The GCD of all the elements is not 1.

Examples:

```Input : arr[] = {6, 18, 3, 12}
Output : 6
6 is the divisor of all except 3.

Input : arr[] = {40, 15, 30, 42}
Output : 3
3 is the divisor of all except 40.
```

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

Approach: Make a prefix array P such that index i contains the GCD of all the elements from 1 to i. Similarly, make a suffix array S such that index i contains the GCD of all the elements from i to n-1 (last index). If the GCD of P[i-1] and S[i+1] is not the divisor of the element at i, then it is the required answer.

Below is the implementation of the above approach:

## C++

 `// C++ program to find the  divisor  of all ` `// except for exactly one element in an array. ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function that returns the  divisor  of all ` `// except for exactly one element in an array. ` `int` `getDivisor(``int` `a[], ``int` `n) ` `{ ` `    ``// There's only one element in the array ` `    ``if` `(n == 1) ` `        ``return` `(a + 1); ` ` `  `    ``int` `P[n], S[n]; ` ` `  `    ``// Creating prefix array of GCD ` `    ``P = a; ` `    ``for` `(``int` `i = 1; i < n; i++)  ` `         ``P[i] = __gcd(a[i], P[i - 1]);     ` ` `  `    ``// Creating suffix array of GCD  ` `    ``S[n-1] = a[n-1]; ` `    ``for` `(``int` `i = n - 2; i >= 0; i--)  ` `         ``S[i] = __gcd(S[i + 1], a[i]);     ` ` `  `    ``// Iterate through the array ` `    ``for` `(``int` `i = 0; i <= n; i++) { ` ` `  `        ``// Variable to store the divisor ` `        ``int` `cur; ` ` `  `        ``// Getting the divisor ` `        ``if` `(i == 0) ` `            ``cur = S[i + 1]; ` `        ``else` `if` `(i == n - 1) ` `            ``cur = P[i - 1]; ` `        ``else` `            ``cur = __gcd(P[i - 1], S[i + 1]); ` ` `  `        ``// Check if it is not a divisor of a[i] ` `        ``if` `(a[i] % cur != 0) ` `            ``return` `cur; ` `    ``} ` ` `  `    ``return` `0; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `a[] = { 12, 6, 18, 12, 16 }; ` ` `  `    ``int` `n = ``sizeof``(a) / ``sizeof``(a); ` ` `  `    ``cout << getDivisor(a, n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java  program to find the divisor of all ` `// except for exactly one element in an array. ` `import` `java.io.*; ` ` `  `class` `GFG { ` `     `  `// Recursive function to return gcd of a and b  ` `    ``static` `int` `__gcd(``int` `a, ``int` `b)  ` `    ``{  ` `        ``// Everything divides 0   ` `        ``if` `(a == ``0``)  ` `          ``return` `b;  ` `        ``if` `(b == ``0``)  ` `          ``return` `a;  ` `        `  `        ``// base case  ` `        ``if` `(a == b)  ` `            ``return` `a;  ` `        `  `        ``// a is greater  ` `        ``if` `(a > b)  ` `            ``return` `__gcd(a-b, b);  ` `        ``return` `__gcd(a, b-a);  ` `    ``}  ` `// Function that returns the divisor of all ` `// except for exactly one element in an array. ` `static` `int` `getDivisor(``int` `a[], ``int` `n) ` `{ ` `    ``// There's only one element in the array ` `    ``if` `(n == ``1``) ` `        ``return` `(a[``0``] + ``1``); ` ` `  `    ``int` `P[] = ``new` `int``[n]; ` `    ``int`    `S[] = ``new` `int``[n]; ` ` `  `    ``// Creating prefix array of GCD ` `    ``P[``0``] = a[``0``]; ` `    ``for` `(``int` `i = ``1``; i < n; i++)  ` `        ``P[i] = __gcd(a[i], P[i - ``1``]);  ` ` `  `    ``// Creating suffix array of GCD  ` `    ``S[n-``1``] = a[n-``1``]; ` `    ``for` `(``int` `i = n - ``2``; i >= ``0``; i--)  ` `        ``S[i] = __gcd(S[i + ``1``], a[i]);  ` ` `  `    ``// Iterate through the array ` `    ``for` `(``int` `i = ``0``; i < n; i++) { ` ` `  `        ``// Variable to store the divisor ` `        ``int` `cur; ` ` `  `        ``// Getting the divisor ` `        ``if` `(i == ``0``) ` `            ``cur = S[i + ``1``]; ` `        ``else` `if` `(i == n - ``1``) ` `            ``cur = P[i - ``1``]; ` `        ``else` `            ``cur = __gcd(P[i - ``1``], S[i + ``1``]); ` ` `  `        ``// Check if it is not a divisor of a[i] ` `        ``if` `(a[i] % cur != ``0``) ` `            ``return` `cur; ` `    ``} ` ` `  `    ``return` `0``; ` `} ` ` `  `// Driver code ` ` `  ` `  `    ``public` `static` `void` `main (String[] args) { ` `            ``int` `a[] = { ``12``, ``6``, ``18``, ``12``, ``16` `}; ` ` `  `    ``int` `n = a.length; ` ` `  `    ``System.out.println(getDivisor(a, n)); ` `    ``} ` `} ` `// This code is contributed by anuj_67.. `

## Python 3

 `# Python 3 program to find the divisor of all  ` `# except for exactly one element in an array.  ` `from` `math ``import` `gcd ` ` `  `# Function to find the divisor of all  ` `# except for exactly one element in an array.  ` `def` `getDivisor(a, n): ` `     `  `    ``# There's only one element in the array  ` `    ``if` `(n ``=``=` `1``):  ` `        ``return` `(a[``0``] ``+` `1``)  ` ` `  `    ``P ``=` `[``0``] ``*` `n  ` `    ``S ``=` `[``0``] ``*` `n ` ` `  `    ``# Creating prefix array of GCD  ` `    ``P[``0``] ``=` `a[``0``] ` `    ``for` `i ``in` `range``(``1``, n):  ` `        ``P[i] ``=` `gcd(a[i], P[i ``-` `1``])  ` ` `  `    ``# Creating suffix array of GCD  ` `    ``S[n ``-` `1``] ``=` `a[n ``-` `1``] ` `    ``for` `i ``in` `range``(n ``-` `2``, ``-``1``, ``-``1``):  ` `        ``S[i] ``=` `gcd(S[i ``+` `1``], a[i])  ` ` `  `    ``# Iterate through the array  ` `    ``for` `i ``in` `range``(``0``, n ``+` `1``):  ` ` `  `        ``# Variable to store the divisor  ` `        ``cur ``=` `0` ` `  `        ``# Getting the divisor  ` `        ``if` `(i ``=``=` `0``): ` `            ``cur ``=` `S[i ``+` `1``]  ` `        ``elif` `(i ``=``=` `n ``-` `1``): ` `            ``cur ``=` `P[i ``-` `1``] ` `        ``else``: ` `            ``cur ``=` `gcd(P[i ``-` `1``], S[i ``+` `1``]) ` ` `  `        ``# Check if it is not a divisor of a[i]  ` `        ``if` `(a[i] ``%` `cur !``=` `0``):  ` `            ``return` `cur ` ` `  `    ``return` `0``;  ` ` `  `# Driver Code ` `if` `__name__``=``=``'__main__'``:  ` `    ``a ``=` `[``12``, ``6``, ``18``, ``12``, ``16``] ` `    ``n ``=` `len``(a)  ` `     `  `    ``print``(getDivisor(a, n)) ` `     `  `# This code is contributed by Rupesh Rao `

## C#

 `// C# program to find the divisor of all ` `// except for exactly one element in an array. ` `using` `System; ` ` `  `class` `GFG  ` `{ ` `     `  `// Recursive function to return gcd of a and b  ` `static` `int` `__gcd(``int` `a, ``int` `b)  ` `{  ` `    ``// Everything divides 0  ` `    ``if` `(a == 0)  ` `        ``return` `b;  ` `    ``if` `(b == 0)  ` `        ``return` `a;  ` `     `  `    ``// base case  ` `    ``if` `(a == b)  ` `        ``return` `a;  ` `     `  `    ``// a is greater  ` `    ``if` `(a > b)  ` `        ``return` `__gcd(a - b, b);  ` `    ``return` `__gcd(a, b - a);  ` `}  ` ` `  `// Function that returns the divisor of all ` `// except for exactly one element in an array. ` `static` `int` `getDivisor(``int``[] a, ``int` `n) ` `{ ` `     `  `    ``// There's only one element in the array ` `    ``if` `(n == 1) ` `        ``return` `(a + 1); ` `     `  `    ``int``[] P = ``new` `int``[n]; ` `    ``int``[] S = ``new` `int``[n]; ` `     `  `    ``// Creating prefix array of GCD ` `    ``P = a; ` `    ``for` `(``int` `i = 1; i < n; i++)  ` `        ``P[i] = __gcd(a[i], P[i - 1]);  ` `     `  `    ``// Creating suffix array of GCD  ` `    ``S[n - 1] = a[n - 1]; ` `    ``for` `(``int` `i = n - 2; i >= 0; i--)  ` `        ``S[i] = __gcd(S[i + 1], a[i]);  ` `     `  `    ``// Iterate through the array ` `    ``for` `(``int` `i = 0; i <= n; i++)  ` `    ``{ ` `     `  `        ``// Variable to store the divisor ` `        ``int` `cur; ` `     `  `        ``// Getting the divisor ` `        ``if` `(i == 0) ` `            ``cur = S[i + 1]; ` `        ``else` `if` `(i == n - 1) ` `            ``cur = P[i - 1]; ` `        ``else` `            ``cur = __gcd(P[i - 1], S[i + 1]); ` `     `  `        ``// Check if it is not a divisor of a[i] ` `        ``if` `(a[i] % cur != 0) ` `            ``return` `cur; ` `    ``} ` `     `  `    ``return` `0; ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main () ` `{ ` `    ``int``[] a = { 12, 6, 18, 12, 16 }; ` ` `  `    ``int` `n = a.Length; ` `     `  `    ``Console.WriteLine(getDivisor(a, n)); ` `} ` `} ` ` `  `// This code is contributed  ` `// by Akanksha Rai `

## PHP

 ` ``\$b``)  ` `        ``return` `__gcd(``\$a` `- ``\$b``, ``\$b``);  ` `         `  `    ``return` `__gcd(``\$a``, ``\$b` `- ``\$a``);  ` `}  ` ` `  `// Function that returns the divisor of all  ` `// except for exactly one element in an array.  ` `function` `getDivisor(``\$a``, ``\$n``)  ` `{  ` `    ``// There's only one element in the array  ` `    ``if` `(``\$n` `== 1)  ` `        ``return` `(``\$a`` + 1);  ` ` `  `    ``\$P` `= ``array``() ; ` `    ``\$S` `= ``array``() ; ` ` `  `    ``// Creating prefix array of GCD  ` `    ``\$P`` = ``\$a``;  ` `     `  `    ``for` `(``\$i` `= 1; ``\$i` `< ``\$n``; ``\$i``++)  ` `        ``\$P``[``\$i``] = __gcd(``\$a``[``\$i``], ``\$P``[``\$i` `- 1]);  ` ` `  `    ``// Creating suffix array of GCD  ` `    ``\$S``[``\$n` `- 1] = ``\$a``[``\$n` `- 1];  ` `    ``for` `(``\$i` `= ``\$n` `- 2; ``\$i` `>= 0; ``\$i``--)  ` `        ``\$S``[``\$i``] = __gcd(``\$S``[``\$i` `+ 1], ``\$a``[``\$i``]);  ` ` `  `    ``// Iterate through the array  ` `    ``for` `(``\$i` `= 0; ``\$i` `<= ``\$n``; ``\$i``++)  ` `    ``{ ` ` `  `        ``// Getting the divisor  ` `        ``if` `(``\$i` `== 0)  ` `            ``\$cur` `= ``\$S``[``\$i` `+ 1];  ` `        ``else` `if` `(``\$i` `== ``\$n` `- 1)  ` `            ``\$cur` `= ``\$P``[``\$i` `- 1];  ` `        ``else` `            ``\$cur` `= __gcd(``\$P``[``\$i` `- 1], ``\$S``[``\$i` `+ 1]);  ` ` `  `        ``// Check if it is not a divisor of a[i]  ` `        ``if` `(``\$a``[``\$i``] % ``\$cur` `!= 0)  ` `            ``return` `\$cur``;  ` `    ``}  ` ` `  `    ``return` `0;  ` `}  ` ` `  `// Driver code  ` `\$a` `= ``array``( 12, 6, 18, 12, 16 ); ` ` `  `\$n` `= sizeof(``\$a``); ` ` `  `echo` `getDivisor(``\$a``, ``\$n``); ` ` `  `// This code is contributed by Ryuga  ` `?> `

Output:

```6
```

My Personal Notes arrow_drop_up Coder Machine Learner Social Activist Vocalist

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.