1.最大公约数
这个题最重要的是要找到一个区间是1,找到之后就可以直接加次数就可以了
#include <bits/stdc++.h>
using namespace std;
main()
{
long long n,i,j,a=0,b,ans=99999;
cin>>n;
long long s[n],dp[n][n];
for(i=0;i<n;i++)
{
cin>>s[i];
if(s[i]==1) a=1;
}
if(a==1) {cout<<n-1;return 0; }
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
dp[i][0]=s[i];
dp[i][i]=s[i];
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
dp[i][j]=__gcd(dp[i][j-1],s[j]);
}
}
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
// cout<<dp[i][j]<<" ";
if(dp[i][j]==1)
{
ans=min(ans,j-i);
}
}
}
cout<<ans+n-1;
return 0;
}