#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; vector V[100010]; int main() { int N; cin >> N; bool checked[100010]; memset(checked, false, sizeof(checked)); vector A(N); for (int i = 0; i < N; ++i) { cin >> A[i]; int a = A[i]; if (not checked[a]) { checked[a] = true; while (a < 100010) { V[a].push_back(A[i]); a += A[i]; } } } int dp[100010]; memset(dp, 0, sizeof(dp)); int ans = 0; memset(checked, false, sizeof(checked)); for (int i = 0; i < N; ++i) { int a = A[i]; if (not checked[a]) { checked[a] = true; sort(V[a].begin(), V[a].end()); reverse(V[a].begin(), V[a].end()); } for (int v : V[a]) { // fprintf(stderr, "a: %d, v: %d, cnt: %d\n", a, v, dp[v]); dp[a] = max(dp[a], dp[v] + 1); ans = max(ans, dp[a]); } } cout << ans << endl; return 0; }