#include <bits/stdc++.h>
int n, r[501000], _[501000][20], Max[501000][20];
int MAX(int a, int b) { return a + r[a] > b + r[b] ? a : b; }
long long Ans;
int Query(int a, int b) {
  if (b >= 2 * n) b = 2 * n - 1;
  int l(b - a + 1), k;
  for (k = 0; (1 << k + 1) <= l; k++)
    ;
  return MAX(Max[a][k], Max[b - (1 << k) + 1][k]);
}
int main() {
  int i, j, k;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d", r + i);
  for (i = 0; i < n; i++) r[i + n] = r[n - i - 1];
  for (i = 0; i < n; i++) r[i] = r[i + n];
  memset(Max, -1, sizeof Max);
  for (i = 0; i < 2 * n; i++) Max[i][0] = i;
  for (k = 1; k < 20; k++)
    for (i = 0; i + (1 << k) - 1 < 2 * n; i++)
      Max[i][k] = MAX(Max[i][k - 1], Max[i + (1 << k - 1)][k - 1]);
  for (i = 0; i < 2 * n; i++) _[i][0] = Query(i, i + r[i]);
  for (k = 1; k < 20; k++)
    for (i = 0; i < 2 * n; i++) _[i][k] = _[_[i][k - 1]][k - 1];
  for (i = 0; i < n; i++) {
    j = i;
    Ans++;
    if (i + r[i] < i + n - 1) {
      for (k = 19; k >= 0; k--)
        if (_[j][k] + r[_[j][k]] < i + n - 1) {
          j = _[j][k];
          Ans += 1 << k;
        }
      Ans++;
    }
  }
  printf("%I64d\n", Ans);
  return 0;
}
