#include using namespace std; const int MAXN = 1000000; vector primes; typedef long long ll; void sieve(){ vector is_prime(MAXN+1,1); for(int i=2;i*i<=MAXN;i++){ if(is_prime[i]){ for(int j = i*i ; j <= MAXN; j+= i){ is_prime[j] = 0; } } } for(int i=2;i get_primes(ll x){ vector ans; for(int i=0;i 1){ ans.push_back(x); } return ans; } map memo; ll solve_dp(ll x , const vector & x_primes){ if(x == 1){ return 1; } ll & ret = memo[x]; if(ret != 0){ return ret; } for(int i=0;i x_primes = get_primes(x); return solve_dp(x, x_primes); } ll longestSequence(vector a) { sieve(); ll res = 0; for(int i=0;i> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } ll result = longestSequence(a); cout << result << endl; return 0; }