有一个包含n个元素的数组。查找具有等于1的GCD的最大子数组的长度。如果没有带有等于1的GCD的子数组,则打印-1。
例子 :
Input : 1 3 5
Output : 3
Input : 2 4 6
Output :-1
一个简单的解决方案是考虑每个子阵列并找到其GCD,并使用GCD跟踪最大的子阵列。最后使用GCD 1返回最大子数组的长度。
一种有效的解决方案基于以下事实:如果任意两个元素的GCD等于1,则整个阵列的GCD等于1。因此,输出为-1或数组长度。
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[0];
for (int i=1; iJava
// 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[0];
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[0];
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
?>
Javascript
输出 :
Length of the largest subarray = 4