如果我们将每个数a分解质因式: a=∏∞i=1pkii ,那么任意一个数a都可以看作一个无穷维的向量 (k1,k2,...) ,其中第i维的系数表示从小到大第i个质数在a中的指数。这样的话 ab 就可以看作是向量的数乘,所以如果有 ab11=ab22 ,就必然有 a1,a2 共线。
所以我们可以统一处理所有共线的向量,这部分向量会有一个基向量a,即每一个向量都可以写成它的若干倍,即 gcd(k1,k2,...,)=1 。注意到0向量会是一个特例,不过还好,这道题的数据范围(a≥2)保证了0向量不在待求矩阵中;不过b≥2这个约束其实是没有意义,≥1也并无妨。。
所以就相当于是有一个乘法矩阵,第i行第j列是i*j,求 [l1,r1]∗[l2,r2] 这个矩形中的不重复元素数量。 [l1,r1] 是a的指数范围,所以是 O(log
[51nod]矩阵中不重复的元素
最新推荐文章于 2020-02-03 22:19:37 发布
这篇博客探讨了一种处理矩阵中不重复元素的方法,通过分解质因数将问题转化为向量处理。在不同数据规模下,博主提出了排序去重、线性统计和容斥原理等解决方案,并详细阐述了每种方法的时间复杂度和适用范围。同时,介绍了如何通过剪枝优化算法,以提高效率。最后,博主分享了从他人代码中学到的技巧,如预处理gcd和避免不必要的dfs。
摘要由CSDN通过智能技术生成