题目
分析
这还是一个并查集的题目。分析样本数据可以发现,并不是找GCD。样本中开始p=3
,在[10, 20]
这个区间中,12/15/18
都可以被3
整除,归并;下一个p=5
,此时10/15/20
也可以归并——注意这是要归并到同一个集合中去,而不是另开一个集合。
有了这个基本思路后,就可以结合筛法先找到[a, b]
之间的所有大于等于p
的质数;遍历[a, b]
间所有这些数,凡是是p
的倍数的都进行归并。而无法归并的自然就独自成组了。
答案
思考
注意:这里的区间是[a, b]
,而parent
数组常规是0
基的,所以在归并时,有一个偏移量的调整:
for (int j = start + prime; j <= b; j += prime)
{
unite(start - a, j - a);
}