#include <iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include <cstdio>
using namespace std;
typedef long long ll;
const int maxn=1000010;
int a[maxn];
long long sum[maxn];
int n;
inline ll solve(long long k) {
ll res=0;
for(int i=1; i<=n; i++) {
//对于当前值ai,要么就是ai%x放到后面,要么就是从后面拿x-ai%x,放到ai
//当为sum[1],也就是只有a[1],相当于就把a[1]变成k的整数倍
//当为sum[2],也就是a[1]+a[2],因为在前面已经把a[1]处理好,所以这里相当于只处理a[2]
//一次类推
ll x=sum[i]%k;
res+=min(x,k-x);
}
return res;
}
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%d",a+i);
sum[i]=a[i]+sum[i-1];
}
long long tot=sum[n],ans=0x7f7f7f7f7f7f7f7f;
for(ll i=2; i*i<=tot; i++) {
if(tot%i) continue;//因子
ans=min(ans,solve(i));
while (tot%i==0) {//除去所有质因子
tot/=i;
}
}
if(tot!=1) ans=min(ans,solve(tot));//最后可能剩下一个因子,没有涉及到
if(ans!=0x7f7f7f7f7f7f7f7f) cout<<ans<<endl;
else cout<<-1<<endl;
return 0;
}