在数组中查找表达式gcd(a [i],a [j])+(j-i)的最大值。我想要一个优化的解决方案。我已经尝试过蛮力,但是它使我超时。
通过检查所有货币对尝试了蛮力解决方案,但这给了我超时的机会
代码
using namespace std;
int gcd(int a,int b)
{
if(a==0)
return b;
if(b==0)
return a;
if(a==b)
return a;
if(a>b)
return gcd(a-b,b);
return gcd(a,b-a);
}
int main() {
int t,n,i,j,mx=0;
cin>>t;
while(t--)
{
cin>>n;
int a[n];
mx=0;
int x;
for(i=0;i<n;i++)
cin>>a[i];
for (i=0;i<n;i++)
{
for (j=i+1;j<n;j++)
{
x=gcd(a[i],a[j])+(j-i);
if(x>mx)
mx=x;
}
}
cout<<mx<<"\n";
}
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
return 0;
}