/* -*- coding: utf-8 -*- * * 1331.cc: No.1331 Moving Penguin - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 100000; const int MAX_R = 320; const int MOD = 1000000007; /* typedef */ typedef long long ll; typedef vector vi; typedef queue qi; typedef pair pii; /* global variables */ int as[MAX_N], dp[MAX_N], ss[MAX_R][MAX_R]; /* subroutines */ inline void addmod(int &a, int b) { a = (a + b) % MOD; } /* main */ int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", as + i); int r = sqrt(n); dp[0] = 1; for (int i = 0; i < n; i++) { for (int j = 1; j <= r; j++) addmod(dp[i], ss[j][i % j]); if (as[i] <= r) addmod(ss[as[i]][i % as[i]], dp[i]); else for (int j = i + as[i]; j < n; j += as[i]) addmod(dp[j], dp[i]); if (i + 1 < n && as[i] != 1) addmod(dp[i + 1], dp[i]); } printf("%d\n", dp[n - 1]); return 0; }