题目链接:Trig Function
题目大意:给定 f(cos(x))=cos(n∗x) ,求 cosm 的系数
题目思路:首先我们有这样一个公式,然后直接套公式做就好了,做双阶乘的时候需要去约分一下
#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll maxn = 1e4+10;
const ll mod = 998244353;
ll quick_mod(ll a,ll b,ll mod)
{
ll ans = 1;
while(b)
{
if(b&1)
ans = (ans*a)%mod;
a = (a*a)%mod;
b >>= 1;
}
return ans;
}
ll fun(ll a,ll b){
ll ans = 1;
for(ll i = a;i <= b;i+=2)
ans = ans*i%mod;
return ans;
}
ll gun(ll n,ll k){
if(n%2 == 0&&k%2 == 0||n%2 == 1&&k%2 == 1){
ll ans = (n-k)/2;
if(ans&1) return -1;
else return 1;
}
return 0;
}
ll n,k,mul[maxn];
int main(){
mul[1] = 1;
for(ll i = 2;i <= maxn;i++)
mul[i] = mul[i-1]*i%mod;
while(~scanf("%lld%lld",&n,&k)){
if(n < k) {puts("0");continue;}
if(k == 0) {
if(n&1) puts("0");
else{
if((n/2)%2 == 0) puts("1");
else puts("998244352");
}
continue;
}
ll ans1 = fun(n-k+2,n+k-2)*n%mod;
ll ans2 = mul[k]%mod;
ll ans = ans1*quick_mod(ans2,mod-2,mod)%mod;
ans = ans*gun(n,k);
printf("%lld\n",(ans+mod)%mod);
}
return 0;
}