#include <iostream>
#include <cstdio>
#include <cstring>
#define LMT 1000005
#define M 100003 // [1..M]
#define clr(x, k) memset((x), (k), sizeof(x))
using namespace std;
int have[LMT],tem[LMT];
int d[M],p;
bool f[M];
void Getprime()
{
int i, j;
p = 0;
clr(f, 0);
for (i=2;i<M;++i)
{
if (!f[i]) d[p++] = i;
for (j=0;(j<p && i*d[j]<M);++j)
{
f[i*d[j]] = 1;
if (i % d[j] == 0) break;
}
}
}
void work(int x)
{
int sz=0,now[25];
for(int i=0;i<p&&x>1;i++)
if(x%d[i]==0)
{
tem[d[i]]=have[d[i]];
now[sz++]=d[i];
while(x%d[i]==0)x/=d[i];
}
for(int i=0;i<sz;i++)
for(int j=0;j<sz;j++)
if(have[now[i]]<tem[now[j]]+1)
have[now[i]]=tem[now[j]]+1;
}
int main()
{
int x,ans=1,n;
Getprime();
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
work(x);
}
for(int i=0;i<LMT;i++)
if(ans<have[i])ans=have[i];
printf("%d\n",ans);
return 0;
}
Codeforces Round #162 (Div. 2), problem: (D) Good Sequences
最新推荐文章于 2021-04-14 11:09:52 发布