#include #include #include using namespace std; const int NUM_VAL = 100005; const int VAL_RANGE = 1000005; int nVal; int val[NUM_VAL]; void read() { cin >> nVal; for (int i = 0; i < nVal; ++i) { cin >> val[i]; } } void work() { sort(val, val + nVal); static int dp[VAL_RANGE]; memset(dp, 0, sizeof(dp)); for (int i = 0; i < nVal; ++i) { int toAdd = 1; for (int divisor = 1; divisor * divisor <= val[i]; ++divisor) { if (val[i] % divisor == 0) { toAdd = max(toAdd, dp[divisor] + 1); } if (val[i] % (val[i] / divisor) == 0) { toAdd = max(toAdd, dp[(val[i] / divisor)] + 1); } } dp[val[i]] = toAdd; } cout << *max_element(dp, dp + VAL_RANGE) << endl; } int main() { read(); work(); return 0; }