闲话 23.1.22

闲话

拜年祭……怎么说呢……中规中矩吧?
没有太多惊艳的演出 也有点炒冷饭的味道
我能做到的是被里面的话语感染到
和看到一些作品后高兴地在椅子上乱动
有很多”有深度的人文作品“
总感觉就是从这里开始不对劲的。

多项式全家桶题单
image

今天大年初一!祝大家新年快乐!
之前都是拜早年 现在才是正式的新年快乐!

EI 推荐了一版绝体绝命 早上听了 好听!
绝体绝命 - 乐正绫 AI

多项式三角函数

就是应用高数相关知识得到一些形式三角函数的表达式。

容易直接写出 sin(x)cos(x) 的麦克劳林级数:

sin(x)=xx33!+x55!x77!+

cos(x)=1x22!+x44!x66!+

我们并无法通过多项式复合得到 sin(F(x)),这是由于 sin(x) 没法被表示为简单多项式的复合。因此我们需要通过一些易于复合的多项式表出它们。

考虑 ex 的麦克劳林级数:

ex=1+x+x22!+x33!+

我们如果能让 sin(x)cos(x) (在某个域上)的线性组合能表出 ex,那我们就可以简单地通过配凑系数用 ex(在这个域内)表出 sin,cos

具体地,我们考虑用 sin(x)cos(x) 直接相加的结果和 ex 来比较系数。我们应当让这两个级数的各项彼此分离,所以不妨构造一类二维交换结合域,记二元数单位是 i。不妨设线性组合是 cos(x)+isin(x),则它的麦克劳林级数是

1+ixx22!ix33!+x44!+ix55!x66!+

根据这个形式,不妨直接展开 eix,能得到

eix=1+ix+i2x22!+i3x33!+i4x44!+i5x55!+i6x66!

可以得到 i2=1,i3=i,i4=1,因此可以知道 i 是虚数单位 1。因此我们也能知道,最开始构造的域就是复数域 C

于是我们能得到经典的欧拉公式:

eix=cos(x)+isin(x)

其中 i=1。也可以知道 eix=cos(x)+isin(x)=cos(x)isin(x)

自然能得到

sin(x)=eixeix2icos(x)=eix+eix2

考虑我们如何将 i 投射在 Fp 域内。可以发现,i 也是 x4=1 的根,即 ω41。假设 gp 的原根,我们能表出 i=g(p1)/4

最后只需要带入 F(x),求一下 exp 即可。总时间复杂度 O(M(n)),或采用半在线卷积得到更快的实现。

Submission.

反三角函数大概要比三角函数前置知识简单一些。

众所周知,反三角函数的导数形式简单,因此我们可以求导再积分。

arcsin(F(x))=(arcsin(F(x)))dx=F(x)(arcsin(x))dx=F(x)1F2(x)dx

arctan(F(x))=(arctan(F(x)))dx=F(x)(arctan(x))dx=F(x)1+F2(x)dx

直接做就行了。

Submission.

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());
}
posted @   joke3579  阅读(60)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示