#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7, INF = 0x3f3f3f3f;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long qpow(long long a, long long n) {
  long long r = 1 % P;
  for (a %= P; n; a = a * a % P, n >>= 1)
    if (n & 1) r = r * a % P;
  return r;
}
long long inv(long long first) {
  return first <= 1 ? 1 : inv(P % first) * (P - P / first) % P;
}
inline int rd() {
  int first = 0;
  char p = getchar();
  while (p < '0' || p > '9') p = getchar();
  while (p >= '0' && p <= '9') first = first * 10 + p - '0', p = getchar();
  return first;
}
const int N = 1e6 + 10;
int n, a[N];
long long sum[N];
long long chk(long long first) {
  long long ans = 0;
  for (int i = 1; i <= n; ++i) {
    long long t = sum[i] % first;
    ans += min(t, first - t);
  }
  return ans;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", a + i), sum[i] = sum[i - 1] + a[i];
  if (sum[n] == 1) return puts("-1"), 0;
  long long first = sum[n], ans = 4e18;
  for (long long i = 2; i * i <= first; ++i)
    if (first % i == 0) {
      while (first % i == 0) first /= i;
      ans = min(ans, chk(i));
    }
  if (first > 1) ans = min(ans, chk(first));
  printf("%lld\n", ans);
}
