[Ynoi2015]此时此刻的光辉
题目大意: 给定一个序列,每次询问一段区间的数的乘积的约数个数。 解题思路: 在太阳西斜的这个世界里,置身天上之森。等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去、逐渐消逝的未来。我回来了,纵使日薄西山,即便看不到未来,此时此刻的光辉,盼君勿忘。————世界上最幸福的女孩 我永远喜欢珂朵莉。 --- \(10^9\)以内的数最多有10个 不同的 质因子。 考虑对其质因数分解。 由于值域范围过大,考虑使用Pollard-Rho算法。 这里普通的Pollard-Rho算法可能会TLE。如果你的代码能通过模板题,那基本上没问题( 窝反正直接把以前写的板子拉过来然后调了调参 )。 之后,你就会得到最多\(10n\)个不同的质因数。对其进行离散化,开桶记录。 然后上莫队,对于每次指针的偏移,把它所有的质因数加到桶里,同时维护约数个数即可。 这部分时间复杂度\(O(10n\sqrt n)\),加上上面的质因数分解的玄学期望复杂度,只能获得82分的好成绩。 --- 我们考虑把每个数\(1000\)以内的质因子先取出来(\(1000\)以内共168个质数),然后,对其做前缀和,记录前缀的出现次数。 然后,由于\(1001^3>10^9\),所以每个数剩下最多不超过2个质因子。这部分用Pollard_Rho找即可。 然后莫队的时候,对于前面168个质数就可以不用维护