Description
求有多少数值不同的分数\(\frac{x}{y}\)(\(1\leq x\leq n, 1\leq y\leq m\)),满足其在\(k\)进制下化为小数之后事纯循环小数(即小数部分是无限循环的)。
\(1\leq n, m\leq 10^9,2\leq k\leq 2000\)。
Solution
首先如果只统计最简分数就能保证数值相同辣(即钦点\(x\perp y\),这里用垂直符号表示互质)。然后通过猜结论等手段可以发现纯循环小数其实限制了\(y\perp k\)。
然后考虑颓柿子: \[ \begin{aligned} \quad&\sum_{x = 1}^n\sum_{y = 1}^m [x\perp y][y\perp k]\\ =&\sum_{x = 1}^n\sum_{y = 1,y\perp k}^m \sum_{d | x, d | y}\mu(d)\\ =&\sum_{d = 1,d\perp k}^{\min(n, m)}\mu(d)\lfloor\frac{n}{d}\rfloor\sum_{y = 1}^{\lfloor\frac{m}{d}\rfloor}[y\perp k] \end{aligned} \] 然后这样是个反演的形式……很容易想到数论分块罢……
接下来首先要考虑对于所有\(\lfloor\frac{m}{d}\rfloor\)处理出范围内和\(k\)互质的数的数量,这个很容易想到洲阁筛的思路。考虑筛出\(k\)的所有质因子\(p_1,p_2,\ldots,p_c\),定义状态\(f(i, j)\)表示不大于\(j\)且和\(p_1, p_2,\ldots,p_i\)互质的数的数目(边界为\(f(0, j) = j\))。然后转移很显然是: \[ f(i, j) = f(i - 1, j) - f(i - 1, \lfloor\frac{j}{p_i}\rfloor) \] 然后我们还有一块硬骨头……就是对于所有\(\lfloor\frac{n}{d}\rfloor\)要求出范围内和\(k\)互质的\(d\)的\(\mu(d)\)的和。还是采用洲阁筛的思路,定义\(g(i, j)\)表示对于所有\(d\)满足\(d\leq j\)且\(d\perp p_1, p_2,\ldots, p_i\)的\(\mu(d)\)的和,这样边界\(g(0, j)\)也就是直接对\(\mu\)求一个前缀和,这个杜教筛处理。其他情况的话,我们要排除在一个没有前\(i\)个质因子的数的基础上乘上\(p_i\)的情况(如果有\(p_i\)这个质因子的话再乘一遍就变成0了,所以对答案没有影响),故转移如下: \[ g(i,j)=g(i - 1, j) + g(i, \lfloor\frac{j}{p_i}\rfloor) \] 考虑到这题\(k\)不大,所以第一维非常的小,甚至不需要用洲阁筛的一般加速方法。总复杂度为\(O(n^\frac{2}{3} + \omega(k)\sqrt{n})\)。
Code
1 |
|