Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <vector>
- #define N 1000000
- #define M 100001
- using namespace std;
- int a[M],v[N+1],maxi[N+1],dp[M];
- vector<int> pr[N+1];
- void eratostene()
- {
- v[1]=1;
- int j;
- for(int i=2;i<=N;++i)
- if(v[i]==0)
- {
- pr[i].push_back(i);
- j=i+i;
- while(j<=N)
- pr[j].push_back(i),v[j]=1,j+=i;
- }
- }
- int main()
- {
- int n;
- ifstream f("pdi.in");
- f>>n;
- for(int i=1;i<=n;++i)
- f>>a[i];
- f.close();
- eratostene();
- int sol=0,d,p;
- for(int i=1;i<=n;++i)
- {
- dp[i]=0;
- d=pr[a[i]].size();
- for(int j=0;j<d;++j)
- {
- p=pr[a[i]][j];
- if(maxi[p]>dp[i])
- dp[i]=maxi[p];
- }
- ++dp[i];
- for(int j=0;j<d;++j)
- {
- p=pr[a[i]][j];
- if(dp[i]>maxi[p])
- maxi[p]=dp[i];
- }
- if(dp[i]>sol)
- sol=dp[i];
- }
- ofstream g("pdi.out");
- g<<sol;
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement