#include <bits/stdc++.h>   using namespace std;   vector<int> prim;   const int N = 1e5 + 9;   int n, dp[10000], a[N];   bool v[100000];   int pos[100000];   void pre() {     for (int i = 2; i < 100000; i++)       if (!v[i]) {         prim.push_back(i);         pos[i] = prim.size() - 1;         int k = i << 1;         while (k < 100000) v[k] = 1, k += i;       }   }   int main() {     pre();     int ans = 1;     cin >> n;     for (int i = 1, now; i <= n; i++) {       cin >> now;       int org = now;       int tmp = 0;       for (int j = 0; j < 100; j++)         if (now % prim[j] == 0) {           while (now % prim[j] == 0) now /= prim[j];           tmp = max(tmp, dp[j] + 1);         }       if (now > 1) tmp = max(tmp, dp[pos[now]] + 1);       for (int j = 0; j < 100; j++)         if (org % prim[j] == 0) {           while (org % prim[j] == 0) org /= prim[j];           dp[j] = tmp;         }       if (org > 1) dp[pos[now]] = tmp;       ans = max(ans, tmp);     }     cout << ans << endl;     return 0;   }   