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