考虑到
res=k=1∑n−1sin−2m(nksπ)=k=1∑n−1(2ienksπi−en−ksπi)−2m=(−4)mk=1∑n−1(enksi2π+en−ksi2π−2)−m=(−4)mk=1∑n−1(wnks+wn−ks−2)−m
由于
gcd(m,s)=1, 有
∑k=1n−1(wnks+wn−ks−2)−m=∑k=1n−1(wnk+wn−k−2)−m
不难发现其就是一个单位根反演的形式,然而
k=0 的部分没有被定义。
于是可以考虑将分母加上某个函数,使得其在
k=0 时取到一个非
0 值,在
k∈[1,n−1] 时都取
0,可以发现
n∑i=1n−1wnki 恰好满足这个条件。
于是可以将原式变为
(−4)m∑k=0n−1(wnk+wn−k−2+n∑i=1nwnki)−m−1
,考虑到
k=0∑n−1(wnk+wn−k−2+n∑i=1nwnki)−m=n[x0](x+x−1−2+n∑i=0n−1xi)−m(modxn−1)
由于对于所有
x=wnk,
(x+x−1−2+n∑i=0n−1xi)−1
均存在,所以
(x+x−1−2+n∑i=0n−1xi)−1 在
modxn−1 下是良定义的,由于多项式形式较为简单,可以直接转化为线性方程组线性消元做到
O(n)。
然后采用多项式快速幂即可计算
(x+x−1−2+n∑i=0n−1xi)−m 在
modxn−1 的取值,做到
O(nlognlogm) 的复杂度。