LG3172 选数 题解
题意
从 \([L,R]\) 中可重地选 \(N\) 个整数,共有 \((R-L+1)^N\) 种方案。对每种方案求其最大公约数,求刚好等于 \(K\) 的选取方案有多少个。
\(1 \le N,K,L,R \le 10^9\),\(0 \le R-L \le 10^5\)
题解
首先 \(L=\lceil \frac{L}{K} \rceil\),\(R=\lfloor \frac{R}{K} \rfloor\),求最大公约数等于 \(1\)。
注意到 \(R-L\) 很小,足以支持 \(N \log N\) 级别的算法。于是设 \(f(i)\) 表示 \(gcd\) 为 \(i\) 的方案数。易证当 \(i>R-L\) 时,\(f \le 1\)。而 \(f\) 又可以用 \(N \log N\) 算法求得:先算 \(g(i)\),表示 \(gcd\) 为 \(i\) 的倍数的方案数;设 \([L,R]\) 中 \(i\) 倍数个数为 \(x\),易得 \(g(i)=x^N\)。简单容斥,减去 \(ki(k>1)\) 的 \(f\) 即得。
上面 \(i>R-L\) 时 \(f \le 1\),还是有些麻烦。转化一下定义,\(f(i)\) 表示 \(gcd\) 为 \(i\) 且选的数不全相同的方案数。则 \(\le 1\) 变成 \(=0\)。此时 \(g-x\),转移方式不变。于是得到答案 \(f(1)\)。
\(L=1\) 时允许全选 \(1\),故加 \(1\)。