#YHCSPJMN120004. 点集选取

点集选取

点集选取

题目背景

在育华学校的数学与算法实践课程里,有这样一个关于点集选取的问题。给定若干带有数值的点,基于数值间的倍数关系构建无向边,需要找出包含点数最多的子集,使得子集中任意两点间都有边相连(即数值满足相互为倍数关系 )。

题目描述

现有 n n 个点,每个点对应一个数值 ai a_i 。当且仅当 ai a_i aj a_j 的整数倍,或者 aj a_j ai a_i 的整数倍时,点 i i 和点 j j 之间可连一条无向边。任务是从这 n n 个点中选出一个点集 S S ,使 S S 中任意两点间都有边,且 S S 的点数最多,求该最大点数。

输入格式

第一行输入一个整数 n n ,表示点的数量。
接下来一行输入 n n 个正整数 a1an a_1 \sim a_n ,依次为每个点对应的数值。

输出格式

输出一个正整数,为满足条件的最大点集的点数。

样例

样例输入 1

6  
2 1 7 9 6 2  

样例输出 1

4  

样例解释

可选取点集对应的数值为 [2,1,6,2][2, 1, 6, 2](对应原输入中的第1、2、5、6个点 ),其中任意两个数值,一个是另一个的倍数,所以最大点集大小为4。

数据规模与测试点(共20个测试点 )

测试点编号 n n 范围 ai a_i 范围 特殊性质
#1~#2 1n10 1 \leq n \leq 10 1ai10 1 \leq a_i \leq 10
#3~#4 1n103 1 \leq n \leq 10^3
#5~#8 1ai106 1 \leq a_i \leq 10^6
#9~#12 1n106 1 \leq n \leq 10^6
#13~#20