func_code_string: #include <bits/stdc++.h>   using namespace std;   int fact[100005];   bitset<100005> p;   int cnt[100005];   int best[100005];   int arr[100005];   int bestFactor(int n) {     if (fact[n] == 0) {       return n;     }     int curFactor = fact[n];     int bestChildFactor = bestFactor(n / curFactor);     if (best[curFactor] == -1) {       return bestChildFactor;     }     if (best[bestChildFactor] == -1) {       return curFactor;     }     if (cnt[best[curFactor]] > cnt[best[bestChildFactor]]) {       return curFactor;     }     return bestChildFactor;   }   void updateFactors(int n, int idx) {     if (fact[n] == 0) {       best[n] = idx;       return;     }     best[fact[n]] = idx;     return updateFactors(n / fact[n], idx);   }   int main() {     memset(best, -1, sizeof best);     p.set();     p[0] = p[1] = false;     for (int i = 2, to = sqrt(100005) + 1; i <= to; i++) {       if (p[i]) {         for (int j = i * i; j < 100005; j += i) {           if (fact[j] == 0) fact[j] = i;           p[j] = false;         }       }     }     int n;     scanf( %d , &n);     for (int i = 0; i < n; i++) {       scanf( %d , &arr[i]);       cnt[i] = 1;     }     updateFactors(arr[0], 0);     int maxi = 1;     for (int i = 1; i < n; i++) {       int bestFact = bestFactor(arr[i]);       if (best[bestFact] != -1) {         cnt[i] = cnt[best[bestFact]] + 1;         maxi = max(maxi, cnt[i]);       }       updateFactors(arr[i], i);     }     cout << maxi;     return 0;   }   