闲话 23.1.22
闲话
拜年祭……怎么说呢……中规中矩吧?
没有太多惊艳的演出 也有点炒冷饭的味道
我能做到的是被里面的话语感染到
和看到一些作品后高兴地在椅子上乱动
有很多”有深度的人文作品“
总感觉就是从这里开始不对劲的。
今天大年初一!祝大家新年快乐!
之前都是拜早年 现在才是正式的新年快乐!
EI 推荐了一版绝体绝命 早上听了 好听!
绝体绝命 - 乐正绫 AI
多项式三角函数
就是应用高数相关知识得到一些形式三角函数的表达式。
容易直接写出 \(\sin(x)\) 和 \(\cos(x)\) 的麦克劳林级数:
我们并无法通过多项式复合得到 \(\sin(F(x))\),这是由于 \(\sin(x)\) 没法被表示为简单多项式的复合。因此我们需要通过一些易于复合的多项式表出它们。
考虑 \(e^x\) 的麦克劳林级数:
我们如果能让 \(\sin(x)\) 和 \(\cos(x)\) (在某个域上)的线性组合能表出 \(e^x\),那我们就可以简单地通过配凑系数用 \(e^x\)(在这个域内)表出 \(\sin, \cos\)。
具体地,我们考虑用 \(\sin(x)\) 和 \(\cos(x)\) 直接相加的结果和 \(e^x\) 来比较系数。我们应当让这两个级数的各项彼此分离,所以不妨构造一类二维交换结合域,记二元数单位是 \(i\)。不妨设线性组合是 \(\cos(x) + i\sin(x)\),则它的麦克劳林级数是
根据这个形式,不妨直接展开 \(e^{ix}\),能得到
可以得到 \(i^2 = -1, i^3 = -i, i^4 = 1\),因此可以知道 \(i\) 是虚数单位 \(\sqrt{-1}\)。因此我们也能知道,最开始构造的域就是复数域 \(\mathbb C\)。
于是我们能得到经典的欧拉公式:
其中 \(i = \sqrt{-1}\)。也可以知道 \(e^{-ix} = \cos(-x) + i\sin(- x) = \cos(x) - i\sin(x)\)。
自然能得到
考虑我们如何将 \(i\) 投射在 \(\mathbb F_{p}\) 域内。可以发现,\(i\) 也是 \(x^4 = 1\) 的根,即 \(\omega_4^1\)。假设 \(g\) 是 \(p\) 的原根,我们能表出 \(i = g^{(p - 1) / 4}\)。
最后只需要带入 \(F(x)\),求一下 \(\exp\) 即可。总时间复杂度 \(O(\text M(n))\),或采用半在线卷积得到更快的实现。
反三角函数大概要比三角函数前置知识简单一些。
众所周知,反三角函数的导数形式简单,因此我们可以求导再积分。
直接做就行了。
code
inline poly sin() const {
int omega_4 = qp(gen, (mod - 1) >> 2);
poly F = ((*this) * omega_4).exp();
return qp(omega_4 * 2, mod - 2) * (F - F.inv());
}
inline poly cos() const {
int omega_4 = qp(gen, (mod - 1) >> 2);
poly F = ((*this) * omega_4).exp();
return qp(2, mod - 2) * (F + F.inv());
}
inline poly tan() const {
return sin() * cos().inv();
}
inline poly asin() const {
poly A = deri(), B = (*this) * (*this); B.resize(size());
B = (1 - B).ivsqrt();
return (A * B).intg().slice(degree());
}
inline poly acos() const {
poly A = (mod - 1) * deri(), B = (*this) * (*this); B.resize(size());
B = (1 - B).ivsqrt();
return (A * B).intg().slice(degree());
}
inline poly atan() const {
poly A = deri(), B = 1 + (*this) * (*this);
B.resize(size()); B = B.inv();
return (A * B).intg().slice(degree());
}
以下是博客签名,与正文无关。
请按如下方式引用此页:
本文作者 joke3579,原文链接:https://www.cnblogs.com/joke3579/p/chitchat230122.html。
遵循 CC BY-NC-SA 4.0 协议。
请读者尽量不要在评论区发布与博客内文完全无关的评论,视情况可能删除。