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;
}