LuoguP3598 Koishi Loves Number Theory
P3598 Koishi Loves Number Theory
感觉挺有意思的。
定义 \(f(n)=\sum_{k=0}^n x^k\),其中 \(x\) 为常数。
给定 \(x\) 和 \(N\) 个自然数 \(a_i\),求 \(\textrm{lcm}\{f(a_1),f(a_2)...f(a_n)\}\)
\(N\le 100,a_i\le 10^{9},2\le x\le 10^{18}\)
\(\rm Sol:\)
注意到:
于是所求为:
接下来,通过一定的手玩,我们可以证明瞎猜一个结论:\(\gcd(x^{a}-1,x^{b}-1)=x^{\gcd(a,b)}-1\)。
可以这样考虑,设 \(f(n)=x^n-1\),我们先证明 \(\gcd(f(n),f(m+n))=\gcd(f(n),f(m))\)
事实上,注意到:
于是对于 \(\gcd(f(x),f(y))\),如果有 \(x<y\),那么 \(\gcd(f(x),f(y))=\gcd(f(x), f(y-x))\),换而言之辗转相除成立,于是我们有 \(\gcd(f(x),f(y))=f(\gcd(x,y))\)
此时我们所求为 \(\textrm{lcm}\),我们可以通过 \(\min-\max\) 反演来通过 \(\gcd\) 计算答案(直接考虑贡献并容斥可以得到相似的结果,但是本质上是 \(\min-\max\) 容斥)
注意到 \(\rm lcm\) 是对于每个质因子指数取 \(\max\),而 \(\gcd\) 为对于每个质因子指数取 \(\min\),在考虑每个质因子下,我们计算一些数的 \(\rm lcm\) 可以轻易的通过 \(\gcd\) 表示:
当我们转换为 \(\gcd\) 的形式后,根据一开始的结论,我们可以不计算这种极大的数的 \(\gcd\) 而是转为计算下标的 \(\gcd\) 并做乘法。
每个数 \(a\) 可以得到的 \(\gcd\) 有且仅有其约数,对于每个约数,其贡献为 \(\sum (-1)^{|S|}[\gcd(S)=x]\),我们可以考虑套路莫比乌斯反演,设 \(F(x)\) 表示至少,那么 \(F(x)=\sum(-1)^{|S|+1}[x|k,\forall k\in S]\),设 \(cnt\) 为这种 \(k\) 的数量,那么 \(F(x)=\sum_{j=1}^{cnt} \binom{cnt}{j} (-1)^{j+1}\),容易知道 \(F(x)=1\)
然后我们做一边容斥/反演即可得到答案,复杂度为 \(\mathcal O((N\cdot \sigma(w))^2+N\times \sqrt{w})\),然而相同的约数我们不需要重复遍历,所以实际复杂度会更小。跑得非常快