CSP-2024 第一次
A
分解 \(a\) 之后可以轻松找到最小的 \(b\) 满足 \((a,b)\) 是好的,而其他的 \(b\) 一定是最小的 \(b\) 的完全平方数倍。
B
暴 力 大 战(为啥 \(d^3(m)\) 甚至 \(d^4(m)\) 能轻松过 1e9 啊,赛时以为 \(d(m)=\Theta(\sqrt m)\),\(d^3(m)=\Theta(m\sqrt m)\) 就没敢写,只写了 \(O(m\log m)\) 的暴力
首先 \(\gcd\) 肯定是 \(\text{lcm}\) 的约数,所以 \(\gcd\) 肯定是 \(m\) 的约数,可以先 \(O(d(m))\) 枚举 \(\gcd=k\),同时也可以知道 \(\text{lcm}=m-k\),
把 \(S\) 中的所有数同时除以 \(k\),则转化为求 \(\gcd=1,\text{lcm}=\dfrac{m-k}k\) 的 \(S\) 的个数,设它是 \(f\left(\dfrac{m-k}k\right)\),
再设 \(\gcd=1,\text{lcm}\mid k\) 的 \(S\) 的个数为 \(g(k)\),则 \(g(k)=\sum\limits_{i\mid k}f(i)\),莫反得到 \(f(k)=\sum\limits_{i\mid k}g(i)\mu\left(\dfrac ki\right)\),现在只需要求 \(g\)。
观察后面的条件 \(\forall i\in S,d\mid i\mid k\),把 \(S\) 中的所有数同时除以 \(d\),可得
设 \(h(k)={\sigma_0(k)\choose n}\),则 \(g=\mu*h\),\(f=\mu*\mu*h\),\(\mu*\mu\) 是积性函数,不用卷直接算,剩下的直接暴力卷即可做到 \(O(d^3(m))\)。
C
肯定是要算出两半的方案数再乘起来,这里只考虑前一半,设 \(f_i\) 表示以数 \(i\) 结尾的子序列个数,则 \(O(n2^m)\) 的暴力是显然的,考虑优化转移。
考虑根号平衡,设 \(p_{i,j}\) 表示已经求出的所有状态中,前 \(\dfrac m2\) 位为 \(i\),后 \(\dfrac m2\) 位 \(\subseteq j\) 的状态的值之和,
填入一个前 \(\dfrac m2\) 位为 \(x\),后 \(\dfrac m2\) 位为 \(y\) 的数 \(v\) 时,只需枚举 \(x\) 的所有子集 \(i\),累加 \(p_{i,y}\) 转移到 \(f_v\) 即可。
考虑 \(f_v\) 加上 \(\Delta\) 时对 \(p\) 的影响,只需枚举 \(y\) 的所有超集 \(j\),把 \(p_{x,j}\) 加上 \(\Delta\) 即可。总复杂度 \(O(n2^{\frac m2})\)。
D
根据 \(q\)-analog 理论,答案是 \(\displaystyle{n+m\brack n}_q\)。
然后 \(q\)-Lucas 定理有一个推论:
左边 Lucas,右边暴算即可。