#ifndef ONLINE_JUDGE #define _GLIBCXX_DEBUG #endif #define _USE_MATH_DEFINES #include using namespace std; using ll = long long; //https://boostjp.github.io/tips/multiprec-int.html #define YES cout<<"Yes\n" #define NO cout<<"No\n" #define YN {cout<<"Yes\n";}else{cout<<"No\n";}// if(a==b)YN; #define NO2 cout<<"-1\n" #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define rrep(i, n) for (int i=int(n)-1; i>=0; --i) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin>>N; vector A(N); rep(i,N) cin >> A[i]; vector rec(*max_element(A.begin(), A.end())+1, 0); int ans = 0; rep(i,N) { if (A[i] == 1) { rec[1] = 1; ans = max(ans, 1); continue; } // A[i] の約数列挙 for (int n=1; n*n<=A[i]; ++n) { if (A[i]%n == 0) { rec[A[i]] = max(rec[A[i]], rec[n]+1); if (n != 1) rec[A[i]] = max(rec[A[i]], rec[A[i]/n]+1); ans = max(ans, rec[A[i]]); } } } cout << ans << endl; }