切比雪夫多項式是與棣美弗定理有關,以遞歸方式定義的一系列正交多項式序列。 一般,第一類切比雪夫多項式以符號Tn表示, 第二類切比雪夫多項式用Un表示。切比雪夫多項式 Tn 或 Un 表明 n 階多項式。c++
切比雪夫多項式在逼近理論中有重要的應用。這是由於第一類切比雪夫多項式的根(被稱爲切比雪夫節點)能夠用於多項式插值。相應的插值多項式能最大限度地下降龍格現象,而且提供多項式在連續函數的最佳一致逼近。函數
對每一個非負整數n, Tn(x) 和 Un(x) 都爲 n次多項式。 而且當n爲偶(奇)數時,它們是關於x 的偶(奇)函數, 在寫成關於x的多項式時只有偶(奇)次項。spa
按切比雪夫多項式的展開式:3d
一個N 次多項式按切比雪夫多項式的展開式爲以下,多項式按切比雪夫多項式的展開能夠用 Clenshaw 遞推公式計算。第一類切比雪夫多項式由如下遞推關係肯定。code
也能夠用母函數表示。blog
第二類切比雪夫多項式 由如下遞推關係給出。遞歸
此時母函數爲ip
在數值分析中,Clenshaw遞推公式 (由Charles William Clenshaw發現)是一個求切比雪夫多項式的值的遞歸方法。ci
N次切比雪夫多項式,是下面形式的多項式p(x)數學
其中Tn是n階切比雪夫多項式
Clenshaw遞推公式能夠用來計算切比雪夫多項式的值。給定
咱們定義
因而
(注)上面的公式在 N=0,1的狀況下無心義。此時咱們能夠用下面的公式:
(downward, omit if N=0)
這裏
或者
其中是第二類切比雪夫多項式
設兩個複數(用三角形式表示)Z1=r1(cosθ1+isinθ1),Z2=r2(cosθ2+isinθ2),則:
Z1Z2=r1r2[cos(θ1+θ2)+isin(θ1+θ2)].
證:先講一下複數的三角形式的概念。在複平面C上,用向量Z(a,b)來表示Z=a+bi.因而,該向量能夠分紅兩個在實軸,虛軸上的分向量.若是向量Z與實軸的夾角爲θ,這兩個分向量的模分別等於rcosθ,risinθ(r=√a^2+b^2).因此,複數Z能夠表示爲Z=r(cosθ+isinθ).這裏θ稱爲複數Z的輻角.
由於Z1=r1(cosθ1+isinθ1),Z2=r2(cosθ2+isinθ2),因此
Z1Z2=r1r2(cosθ1+isinθ1)(cosθ2+isinθ2)
=r1r2(cosθ1cosθ2+icosθ1sinθ2+isinθ1cosθ2-sinθ1sinθ2)
=r1r2[(cosθ1cosθ2-sinθ1sinθ2)+i(cosθ1sinθ2+sinθ1cosθ2)]
=r1r2[cos(θ1+θ2)+isin(θ1+θ2)].
其實該定理能夠推廣爲通常形式:
設n個複數Z1=r1(cosθ1+isinθ1),Z2=r2(cosθ2+isinθ2),……,Zn=rn(cosθn+isinθn),則:
Z1Z2……Zn=r1r2……rn[cos(θ1+θ2+……+θn)+isin(θ1+θ2+……+θn)].
證:用數學概括法便可,概括基礎就是兩個複數相乘的棣莫弗定理。
若是把棣莫弗定理和歐拉(Euler)公式「e^iθ=cosθ+isinθ」(參見《泰勒公式》,嚴格的證實須要複分析)放在一塊兒看,則能夠用來理解歐拉公式的意義。
利用棣莫弗定理有:
Z1Z2……Zn=r1r2……rn [cos(θ1+θ2+……+θn)+isin(θ1+θ2+……+θn)]
若是能夠把全部的複數改寫成指數的形式,即:Z1=r1e^iθ1,Z2=r2e^iθ2,……,Zn=rne^iθn,
Z1Z2……Zn=r1r2……rn e^i(θ1+θ2+……+θn)
這和指數的可加性一致.
在通常形式中若是令Z1=Z2=……=Zn=Z,則能導出複數開方的公式.有興趣可本身推推看.
下面這題可做爲切比雪夫多項式的模版:
TimeLimit: 2000/1000 MS (Java/Others) Memory Limit:32768/32768 K (Java/Others)
Total Submission(s): 714 Accepted Submission(s): 206
Problem Description
f(cos(x))=cos(n∗x) holds for all x.
Given two integersn and m , you need to calculate the coefficient of x^m in f(x), modulo 998244353
Input
Multiple testcases (no more than 100).
Each test casecontains one line consisting of two integers n and m.
1≤n≤109,0≤m≤104
Output
Output the answerin a single line for each test case.
Sample Input
2 0
2 1
2 2
Sample Output
998244352
0
2
【題意】
給出一個函數,代入n,m後求出xm的係數,並取模輸出。
【思路】
咱們先嚐試把cos(nx)化爲cos(x)的形式,而後把cos(x)用x代換,就能夠獲得f(x)=...的形式,而後就能獲得所求的係數了。
那麼咱們如何把cos(nx)化爲cos(x)的形式呢。
其實能夠嘗試着暴力寫出前幾項的形式。以下圖:
由寫出的式子,咱們能夠發現如下幾點:
依照這個規律分類討論一下便可。
因而咱們能夠獲得如下通常解析式
注意"!!"不是階乘的階乘,而是不超過n且與n具備相同奇偶性的全部正整數連乘積。
n分類討論下,當n爲偶數時m=2*k, n爲奇數時m=2*k-1
還有注意下"!!"的約分,可能下面的比上面的大
因而咱們就獲得瞭如下代碼:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=1e5+5; 5 const int mod=998244353; 6 ll fac[maxn]={1}; 7 ll n,m; 8 void init() 9 { 10 for(int i=1;i<maxn;i++) 11 fac[i]=fac[i-1]*i%mod; 12 } 13 ll qmod(ll x,int q) 14 { 15 ll res=1; 16 while(q) 17 { 18 if(q%2) 19 res=res*x%mod; 20 x=x*x%mod; 21 q/=2; 22 } 23 return res; 24 } 25 int main(void) 26 { 27 init(); 28 while(~scanf("%lld%lld",&n,&m)) 29 { 30 if(m>n) 31 puts("0"); 32 else if(n%2&&m%2==0) 33 puts("0"); 34 else if(n%2==0&&m%2) 35 puts("0"); 36 else 37 { 38 ll fz=n%mod; 39 if(m>=1) 40 { 41 for(int i=n-m+1;i<=n+m-1;i++) 42 { 43 if(i%2==(n+m-2)%2) 44 { 45 fz=fz*i%mod; 46 } 47 } 48 ll tmp=fz*qmod(fac[m],mod-2)%mod; 49 if((n-m)/2%2) 50 tmp=-tmp; 51 printf("%lld\n",(tmp+mod)%mod); 52 } 53 else 54 { 55 ll t=1; 56 for(int i=n+m-1;i<=n-m;i++) 57 { 58 if(i%2==(n+m-2)%2) 59 t=t*i%mod; 60 } 61 ll tmp=fz*qmod(fac[m],mod-2)%mod*qmod(t, mod-2)%mod; 62 if((n-m)/2%2) 63 tmp=-tmp; 64 printf("%lld\n",(tmp+mod)%mod); 65 } 66 } 67 } 68 }