# Largest subarray with GCD one

There is an array with n elements. Find length of the largest subarray having GCD equal to 1. If no subarray with GCD 1, then print -1.

Examples :

```Input  : 1 3 5
Output : 3

Input : 2 4 6
Output :-1
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

A simple solution is to consider every subarray and find its GCD and keep track of largest subarray with GCD one. Finally return length of the largest subarray with GCD 1.

An efficient solution is based on fact that if any two elements have GCD equals to one, then whole array has GCD one. So the output is either -1 or length of array.

## C++

 `// C++ progra, to find length of the largest ` `// subarray with GCD equals to 1. ` `#include ` `using` `namespace` `std; ` ` `  `int` `findLargest(``int` `arr[], ``int` `n) ` `{ ` `    ``/*If gcd of any subarray is 1 then gcd of ` `     ``any number with the sub array will be 1. ` `     ``so if we are getting any subarray with ` `     ``gcd 1, then maximum number of element of ` `      ``the subarray will be equal to the number ` `      ``of elements of the array. Else it will be -1.*/` `    ``int` `gcd = arr; ` `    ``for` `(``int` `i=1; i

## Java

 `// Java program, to find length of the  ` `// largest subarray with GCD equals to 1. ` `class` `GFG { ` `     `  `    ``static` `int` `___gcd(``int` `a, ``int` `b) ` `    ``{ ` `         `  `        ``// Everything divides 0  ` `        ``if` `(a == ``0` `|| b == ``0``) ` `            ``return` `0``; ` `     `  `        ``// base case ` `        ``if` `(a == b) ` `            ``return` `a; ` `     `  `        ``// a is greater ` `        ``if` `(a > b) ` `            ``return` `___gcd(a - b, b); ` `             `  `        ``return` `___gcd(a, b - a); ` `    ``}  ` `     `  `    ``static` `int` `findLargest(``int` `arr[],  ` `                                ``int` `n) ` `    ``{ ` `         `  `        ``/*If gcd of any subarray is 1  ` `        ``then gcd of any number with the  ` `        ``sub array will be 1. so if we  ` `        ``are getting any subarray with ` `        ``gcd 1, then maximum number of ` `        ``element of the subarray will  ` `        ``be equal to the number of   ` `        ``elements of the array. Else  ` `        ``it will be -1.*/` `        ``int` `gcd = arr[``0``]; ` `         `  `        ``for` `(``int` `i = ``1``; i < n; i++) ` `            ``gcd = ___gcd(gcd, arr[i]); ` `     `  `        ``return` `(gcd == ``1``)? n : -``1``; ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `main (String[] args) ` `    ``{ ` `        ``int` `arr[] = {``1``, ``3``, ``5``, ``7``}; ` `        ``int` `n = arr.length; ` `         `  `        ``System.out.print(``"Length of the "`  `                   ``+ ``"largest subarray = "` `                   ``+ findLargest(arr, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by Anant Agarwal. `

## Python3

 `# Python program, to find ` `# length of the largest ` `# subarray with GCD equals to 1. ` ` `  `def` `___gcd(a,b): ` ` `  `    ``# Everything divides 0  ` `    ``if` `(a ``=``=` `0` `or` `b ``=``=` `0``): ` `        ``return` `0` `  `  `    ``# base case ` `    ``if` `(a ``=``=` `b): ` `        ``return` `a ` `  `  `    ``# a is greater ` `    ``if` `(a > b): ` `        ``return` `___gcd(a``-``b, b) ` `    ``return` `___gcd(a, b``-``a) ` `     `  `def` `findLargest(arr, n):  ` ` `  `    ``'''If gcd of any subarray is 1 then gcd of ` `     ``any number with the sub array will be 1. ` `     ``so if we are getting any subarray with ` `     ``gcd 1, then maximum number of element of ` `      ``the subarray will be equal to the number ` `      ``of elements of the array. Else it will be -1.'''` `    ``gcd ``=` `arr[``0``] ` `    ``for` `i ``in` `range``(``1``,n): ` `        ``gcd ``=` `___gcd(gcd, arr[i]) ` `  `  `    ``return` `n ``if` `(gcd ``=``=` `1``) ``else` `-``1` `     `  `# Driver code ` `arr``=``[``1``, ``3``, ``5``, ``7``] ` `n``=``len``(arr) ` ` `  `print``(``"Length of the largest subarray = "``, ` `         ``findLargest(arr, n)) ` ` `  `# This code is contributed ` `# by Anant Agarwal. `

## C#

 `// C# program, to find length of the  ` `// largest subarray with GCD equals to 1. ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``static` `int` `___gcd(``int` `a, ``int` `b) ` `    ``{ ` `         `  `        ``// Everything divides 0  ` `        ``if` `(a == 0 || b == 0) ` `            ``return` `0; ` `     `  `        ``// base case ` `        ``if` `(a == b) ` `            ``return` `a; ` `     `  `        ``// a is greater ` `        ``if` `(a > b) ` `            ``return` `___gcd(a - b, b); ` `             `  `        ``return` `___gcd(a, b - a); ` `    ``}  ` `     `  `    ``static` `int` `findLargest(``int` `[]arr,  ` `                           ``int` `n) ` `    ``{ ` `         `  `        ``// If gcd of any subarray is 1  ` `        ``// then gcd of any number with the  ` `        ``// sub array will be 1. so if we  ` `        ``// are getting any subarray with ` `        ``// gcd 1, then maximum number of ` `        ``// element of the subarray will  ` `        ``// be equal to the number of  ` `        ``// elements of the array. Else  ` `        ``// it will be -1. ` `        ``int` `gcd = arr; ` `         `  `        ``for` `(``int` `i = 1; i < n; i++) ` `            ``gcd = ___gcd(gcd, arr[i]); ` `     `  `        ``return` `(gcd == 1)? n : -1; ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main () ` `    ``{ ` `        ``int` `[]arr = {1, 3, 5, 7}; ` `        ``int` `n = arr.Length; ` `         `  `        ``Console.Write(``"Length of the "` `                       ``+ ``"largest subarray = "` `                       ``+ findLargest(arr, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by Nitin Mittal. `

## PHP

 ` ``\$b``) ` `        ``return` `___gcd(``\$a` `- ``\$b``, ``\$b``); ` `         `  `    ``return` `___gcd(``\$a``, ``\$b` `- ``\$a``); ` `}  ` ` `  `function` `findLargest(``\$arr``, ``\$n``) ` `{ ` `     `  `    ``/*If gcd of any subarray is 1  ` `    ``then gcd of any number with the  ` `    ``sub array will be 1. so if we  ` `    ``are getting any subarray with ` `    ``gcd 1, then maximum number of ` `    ``element of the subarray will  ` `    ``be equal to the number of  ` `    ``elements of the array. Else  ` `    ``it will be -1.*/` `    ``\$gcd` `= ``\$arr``; ` `     `  `    ``for` `(``\$i` `= 1; ``\$i` `< ``\$n``; ``\$i``++) ` `        ``\$gcd` `= ___gcd(``\$gcd``, ``\$arr``[``\$i``]); ` ` `  `    ``return` `(``\$gcd` `== 1)? ``\$n` `: -1; ` `} ` ` `  `// Driver code ` `\$arr` `= ``array``(1, 3, 5, 7); ` `\$n` `= ``count``(``\$arr``); ` ` `  `echo` `"Length of the "` `.  ` `     ``"largest subarray = "` `.  ` `      ``findLargest(``\$arr``, ``\$n``); ` ` `  `// This code is contributed by Sam007 ` `?> `

Output :

```Length of the largest subarray = 4
```

This article is contributed by Smarak Chopdar. 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.

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.

My Personal Notes arrow_drop_up

Improved By : nitin mittal, Sam007

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.