闲话 24.6.18

闲话

闲话好久没更了。今天来点凑数的 /cy
最近在帮 jjdw 做[数据删除]。恶心死我了 /fn
还好搞出了点成果[数据删除]。

你聪明的,告诉我,我们的多项式科技为什么一去不复返呢?

看到 uq 有一个级数求和,尝试证明无果
把我的结果扔到闲话里给大家乐呵乐呵

构式

证明:

\[\sum_{n\ge 1} \frac{6n+1}{2n(2n+1)}\binom{2n}{n}^2 \frac{1}{2^{6n}} = 3\ln 2 - 2 \]

注意到令

\[F(x) = \sum_{n\ge 1} \frac{1}{2n(2n+1)}\binom{2n}{n}^2 x^n \]

答案即 \(\left(xF(x^6)\right)'\big\rvert_{x = 1/2}\)。扔进 mma 可以知道

\[F(x) = 1 - \frac{2}{\pi}K(16x) + \frac{8x}{3} {}_3F_2\left(\left.\begin{matrix}\frac{3}{2},\frac{3}{2},\frac{3}{2}\\2,\frac{5}{2}\end{matrix}\right\rvert 16x\right) + 2x {}_4F_3\left(\left.\begin{matrix}\frac{3}{2},\frac{3}{2},1,1\\2,2,2\end{matrix}\right\rvert 16x\right) \]

其中 \(K(x)\) 为第一类完全椭圆积分。

呃……

快进到结果:

\[\frac{4K(1/4)}{\pi} - \frac{1}{12} {}_3F_2\left(\left.\begin{matrix}\frac{3}{2},\frac{3}{2},\frac{3}{2}\\2,\frac{5}{2}\end{matrix}\right\rvert \frac{1}{4}\right) + \frac{1}{32} {}_4F_3\left(\left.\begin{matrix}\frac{3}{2},\frac{3}{2},1,1\\2,2,2\end{matrix}\right\rvert \frac{1}{4}\right) - 2 \]

它和 \(3\ln 2-2\) 在前 300 位都是一样的 😃

推流:6.13闲话6.15闲话

无理无智传说了!
冠世一战要神话了!

今日推歌:中间灰 by 不鱼_p feat. 海伊

你会笑我吗?

所以为什么不使用 2log 多项式复合呢?

炒点别人炒过的冷饭。

我们经常能遇到这样一类经典问题:

给定 \(f(x), g(x), n, m\),对每个 \(0\le k \le m\) 计算 \(a_k = [x^n] g(x) f(x)^k\)

其中 \(f(x), g(x)\) 不一定具有简单的封闭形式。下面分情况整理一下做法。

已经知道了多项式复合(逆)可以在 \(O(\text M(n) \log n)\) 的复杂度内完成。

\(1.\) \(f(x), g(x)\) 为截断到 \(x^n\) 项的多项式。

最简单的一种情况。知道 \([x^n] g(x) f(x)^k\) 为多项式

\[h(y) = \sum_{i \ge 0} [x^n] g(x)f^i(x) y^i = [x^n] \frac{g(x)}{1-yf(x)} \]

的前 \(m + 1\) 项系数。应用 Bostan-Mori 方法即可在 \(O(\text M(n) \log n)\) 的复杂度内解决。

code
poly enum_kth(const poly& f, const poly& g, int n, int m) {
    if (n < 0 or m <= 0) return poly();
    poly P(n + 1), Q((n + 1) << 1);
    copy_n(g.f.cbegin(), min(P.size(), g.size()), P.f.begin());
    Q.f.front() = 1;
    if (f.size()) for (int i = n + 1, j = 0; i < Q.size() and j < f.size();) Q[i ++] = (f[j] == 0 ? 0 : mod - f[j]), ++ j;

    auto quad_nonres = [&](){ for(int i = 2; ; ++ i) if (qp(i, mod >> 1) == mod - 1) return i; };
    auto sylow2_subgroup_gen = [&](){ return qp(quad_nonres(), mod >> __builtin_ctz(mod - 1)); };
    auto get_root = [&](int m) {
        vu32 root = {ginv(2)};
        array<int, __builtin_ctz(mod - 1) - 1> irt;
        irt.back() = qp(sylow2_subgroup_gen(), mod - 2);
        for(int i = __builtin_ctz(mod - 1) - 3; i >= 0; -- i) irt[i] = 1ll * irt[i + 1] * irt[i + 1] % mod;
        int s = (int)root.size();
        if (s < m) {
            root.resize(m);
            for (int i = __builtin_ctz(s), j; (1 << i) < m; ++ i) {
                root[j = (1 << i)] = irt[i];
                for (int n = j + 1; n < (j << 1); ++ n)
                    root[n] = 1ll * root[n - j] * root[j] % mod;
                root[j] = 1ll * root[j] * root.front() % mod;
            }
        } return root;
    };

    for (int d = 1; n != 0; d <<= 1, n >>= 1) {
        const int lg_len = lg((2 * d + 1) * (2 * n + 2) - 1) + 1, len = 1 << lg_len; 
        poly P_(len), Q_(len), U(len / 2), V(len / 2);
        for (int i = 0; i <  d; ++ i) copy_n(P.f.cbegin() + i * (n + 1), n + 1, P_.f.begin() + i * (2 * n + 2));
        for (int i = 0; i <= d; ++ i) copy_n(Q.f.cbegin() + i * (n + 1), n + 1, Q_.f.begin() + i * (2 * n + 2)); 
        ntt(P_.data(), lg_len); ntt(Q_.data(), lg_len);
        if (n & 1) {
            auto root = get_root(len >> 1);
            for (int i = 0; i < len; i += 2) {
                U[i / 2] = 1ll * (1ll * P_[i] * Q_[i + 1] % mod - 1ll * P_[i + 1] * Q_[i] % mod + mod) * root[i / 2] % mod;
                V[i / 2] = 1ll * Q_[i] * Q_[i + 1] % mod;
            }
        } else {
            auto root = get_root(1);
            for (int i = 0; i < len; i += 2) {
                U[i / 2] = 1ll * (1ll * P_[i] * Q_[i + 1] + 1ll * P_[i + 1] * Q_[i]) % mod * root[0] % mod;
                V[i / 2] = 1ll * Q_[i] * Q_[i + 1] % mod;
            }
        } 
        intt(U.data(), lg_len - 1), intt(V.data(), lg_len - 1);
        P.f.assign((2 * d) * (n / 2 + 1), 0);
        Q.f.assign((2 * d + 1) * (n / 2 + 1), 0);
        for (int i = 0; i <  (d << 1); ++ i) copy_n(U.f.cbegin() + i * (n + 1), n / 2 + 1, P.f.begin() + i * (n / 2 + 1));
        for (int i = 0; i <= (d << 1); ++ i) copy_n(V.f.cbegin() + i * (n + 1), n / 2 + 1, Q.f.begin() + i * (n / 2 + 1)); 
    } P.resize(m), Q.resize(m);

    return (P / Q).resize(m);
    };

\(2.\) \(f(x)\in F_p[[x]], \text{ord } f(x) = 1\)

\(h(x) = f^{\langle -1 \rangle}(x)\),应用另类拉格朗日反演有

\[a_k = [x^{n - k}] g(h(x)) h'(x) \left(\frac{x}{h(x)}\right)^{n+1} \]

用 2log 多项式复合就有点脱裤子放屁

当然鰰的意思可能是当 \(f(x), g(x)\) 有封闭形式的时候,由于 \(f(x)\)\(x\phi(x)\) 的形式,\(h(x)\) 也可以简单地牛迭出来,并且复合 \(g(x)\) 也不很困难。这样总复杂度可能是 \(O(n\log n)\)

\(3.\) \(f(x)\in F_p[[x]], \text{ord } f(x) > 1\)

只需要将 \(f(x)\) 转化成阶为 \(1\) 的情况即可。令 \(d = \text{ord } f(x), c = f[d]\),则 \(F(x) = \sqrt[d]{f(x)/c}\) 满足 \(2.\) 情况。此时

\[a_k = c^k[x^n] g(x) F(x)^{dk} \]

下同 \(2.\)

\(4.\) \(f(x)\in F_p[[x]], \text{ord } f(x) = 0\)

\(f(x) = F(x) + c\)。由 \(2., 3.\) 讨论,不妨令 \(\text{ord } F(x) = 1\)。此时令 \(h(x) = F^{\langle -1 \rangle}(x)\),有

\[a_k = [x^n] g(x) \left(F(x) + c\right)^k = [x^n]g(h(x)) (x+c)^k h'(x) \left(\frac{x}{h(x)}\right)^{n+1} \]

这样就将 \(f(x)\) 归约到了 \(x + c\) 上。二项展开后卷积即可 \(O(\text M(n))\) 解决这一部分。

\(5.\) \(f(x)\) 为形式 laurent 级数。

\(f(x) = x^{-c} \phi(x)\)\(c > 0\)),则 \(f(x)^{-1} = x^c \phi^{-1}(x)\) 为一个阶为 \(c\) 的形式幂级数。因此令形式幂级数 \(F(x) = f(x)^{-1}\),有

\[a_k = [x^n] g(x) F(x)^{-k} \]

参照 \(2., 3.\) 解决即可。

posted @ 2024-06-18 09:45  joke3579  阅读(103)  评论(0编辑  收藏  举报