\ \ \ \ \ \ \, 说好了,这个作用不大,主要是……过一下板子,赶时间的小朋友可以右上角叉叉了……
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 e−ix=cosx−isinx
  \ \ \ \ \ \ \, 加减一下得到:
2 cos x = e i x + e − i x 2\cos x=e^{ix}+e^{-ix} 2cosx=eix+e−ix
2 i sin x = e i x − e − i x 2i\sin x=e^{ix}-e^{-ix} 2isinx=eix−e−ix
  \ \ \ \ \ \ \, 所以有:
cos x = e i x + e − i x i \cos x=\frac{e^{ix}+e^{-ix}}{i} cosx=ieix+e−ix
sin x = e i x − e − i x 2 i \sin x=\frac{e^{ix}-e^{-ix}}{2i} sinx=2ieix−e−ix
  \ \ \ \ \ \ \, 用多项式 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(i⋅A)+exp(−i⋅A)
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(i⋅A)−exp(−i⋅A)
  \ \ \ \ \ \ \, 多项式卷单项式, 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 mod−1 在 % 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)=∫1−A2A′dx
A t a n ( A ) = ∫ A ′ 1 + A 2 d x Atan(A)=\int \frac{A'}{1+A^2}dx Atan(A)=∫1+A2A′dx
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));
}