昨天晚上写这个题综测挂了,没有特判全是1的情况.
/*************************************************************************
> File Name: cf3.cpp
> Author:
> Mail:
> Created Time: 2017年11月18日 星期六 09时55分17秒
************************************************************************/
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 2005;
int a[maxn];
int dp[maxn][maxn];
int gcd(int a, int b){ return a == 0 ? b : gcd(b % a, a); }
int main()
{
int n;
scanf("%d",&n); int ans = 0;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<n;i++) if(a[i]==1) ans++;
if(ans) { printf("%d\n",n-ans); return 0; }
for(int i=0;i<n;i++) dp[i][i] = a[i];
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
dp[i][j] = gcd(dp[i][j-1],a[j]);
}
}
int len = n+1; int l,r;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(dp[i][j]==1&&len>j-i+1)
{
len = j-i+1;
l = i, r = j;
}
}
}
if(len==n+1){ puts("-1"); return 0;}
printf("%d\n",n+len-2);
return 0;
}