多项式全家桶(五):多项式三角函数,反三角函数

         \ \ \ \ \ \ \,       说好了,这个作用不大,主要是……过一下板子,赶时间的小朋友可以右上角叉叉了……


1. 多项式 S i n Sin Sin & 多项式 C o s Cos Cos

         \ \ \ \ \ \ \,       P5264 【模板】多项式三角函数

         \ \ \ \ \ \ \,       欧拉公式:

e i x = cos ⁡ x + i sin ⁡ x e^{ix}=\cos x+i\sin x eix=cosx+isinx

         \ \ \ \ \ \ \,       直接推公式:

e − i x = cos ⁡ x − i sin ⁡ x e^{-ix}=\cos x-i\sin x eix=cosxisinx

         \ \ \ \ \ \ \,       加减一下得到:

2 cos ⁡ x = e i x + e − i x 2\cos x=e^{ix}+e^{-ix} 2cosx=eix+eix

2 i sin ⁡ x = e i x − e − i x 2i\sin x=e^{ix}-e^{-ix} 2isinx=eixeix

         \ \ \ \ \ \ \,       所以有:

cos ⁡ x = e i x + e − i x i \cos x=\frac{e^{ix}+e^{-ix}}{i} cosx=ieix+eix

sin ⁡ x = e i x − e − i x 2 i \sin x=\frac{e^{ix}-e^{-ix}}{2i} sinx=2ieixeix

         \ \ \ \ \ \ \,       用多项式 A A A替换掉 x x x 即可:

cos ⁡ ( A ) = e x p ( i ⋅ A ) + e x p ( − i ⋅ A ) i \cos (A)=\frac{exp(i\cdot A)+exp(-i\cdot A)}{i} cos(A)=iexp(iA)+exp(iA)

sin ⁡ ( A ) = e x p ( i ⋅ A ) − e x p ( − i ⋅ A ) 2 i \sin (A)=\frac{exp(i\cdot A)-exp(-i\cdot A)}{2i} sin(A)=2iexp(iA)exp(iA)

         \ \ \ \ \ \ \,       多项式卷单项式, e x p exp exp,求逆,多项式卷多项式就好了,现在问题是 i i i 怎么搞:

         \ \ \ \ \ \ \,       已知 i 2 = − 1 i^2=-1 i2=1,所以说 i i i 既是 m o d − 1 mod-1 mod1 % m o d \%mod %mod意义下的二次剩余,具体怎么算二次剩余呢,可以看这里,显然可以预处理出来,前置和目录里面已经说的有了,既为 i m g img img

inline Polynomial Sin(const Polynomial &a){
	return (Exponential(a*img)-Exponential(a*(mod-img)))*Inv(2ll*img%mod);
}
inline Polynomial Cos(const Polynomial &a){
	return (Exponential(a*img)+Exponential(a*(mod-img)))*Inv(2);
}

2. 多项式 A s i n Asin Asin & 多项式 A t a n Atan Atan

         \ \ \ \ \ \ \,       P5265 【模板】多项式反三角函数

         \ \ \ \ \ \ \,       这个东西比较麻烦啦,直接给公式咯,具体证明可以看教材:

A s i n ( A ) = ∫ A ′ 1 − A 2 d x Asin(A)=\int \frac{A'}{\sqrt{1-A^2}}dx Asin(A)=1A2 Adx

A t a n ( A ) = ∫ A ′ 1 + A 2 d x Atan(A)=\int \frac{A'}{1+A^2}dx Atan(A)=1+A2Adx

inline Polynomial Asin(const Polynomial &a){
	Polynomial As_a=a*a;
  	As_a.resize(a.size());
  	for(int i=0;i<a.size();i++)As_a[i]=(mod-As_a[i]);
	As_a[0]=(1+As_a[0])%mod;
  	return Integral(Derivation(a)*Inverse(Kth_root(As_a,2)));
}
inline Polynomial Atan(const Polynomial &a){
	Polynomial At_a=a*a;
  	At_a.resize(a.size());At_a[0]=(1+At_a[0])%mod;
  	return Integral(Derivation(a)*Inverse(At_a));
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值