
#include<bits/stdc++.h>
using namespace std;
long long a[100010],b[100010];
int main()
{
int n;
cin>>n;////从标准输入读取一个整数n,表示数组a的长度
for(int i=1;i<=n;i++)
//循环从1到n,通过scanf读取数组a的每个元素。
{
scanf("%d",&a[i]);
}
int ans1; //用于记录每次尝试生成斐波那契数列与原数组a不同元素的数量。
int minn=2e9; //初始化minn为一个较大的值(2e9即2*10^9),用于存储最小的不同元素数量。
for(int i=1;i<=100000;i++)
{
ans1=0;//累加器清零
int num;
b[1]=b[2]=i;//将i赋值给前两位
if(b[1]!=a[1]) ans1++;
if(b[2]!=a[2]) ans1++;//要判断前两项
//外层循环从1到100000,每次循环设定斐波那契数列的起始值b[1]和b[2]都为i,然后判断起始的两项与数组a对应项是否相同,不同则ans1加1。
for(int j=3;b[j-1]<1e6;j++)
{
b[j]=b[j-1]+b[j-2];
if(b[j]!=a[j]) ans1++;
num=j;
}
//内层循环从3开始,不断生成斐波那契数列b,并与数组a对应元素比较,不同则ans1加1,同时记录当前生成到的下标num。
ans1+=(n-num);//因为只累加到了小于等于1e6的部分,所以还要将大于1e6的数量加上
minn=min(minn,ans1);//每次内层循环结束后,更新minn为当前minn和ans1中的较小值。
}
//循环结束,现在生成了i个斐波那契数,与输入数组进行多次比较,找到了最小值
cout<<minn;//将最小值输出
return 0;
}