\[\sum_^n\tbinomp^i\lfloor\frac ik\rfloor \pmod
\]\(1 \leq n,p <998244353,k \in \|0 \leq w \leq 20\}\)
首先知道乙個結論\([n|k]=\sum_^\omega_n^\),下面將用這個柿子亂搞。
\[\sum_^n\tbinomp^i\lfloor\frac ik\rfloor
\]\[=\sum_^n\tbinomp^i\frac
\]\[=\frac\sum_^n\tbinomp^i(i-i\bmod k)
\]\[=\frac(\sum_^n\tbinomp^ii-\sum_^n\tbinomp^i(i\bmod k))
\]目標求出裡面那坨。把式子拆成兩部分。
首先不難發現
\[\tbinomi=\fraci=\frac=\tbinomn
\]於是我們將其帶進去。不過需要注意\(i=0\)可能會出現負數,拎出來特判發現是\(0\)
\[\sum_^n\tbinomnp^i
\]用\(i+1\)替換\(i\)
\[np\sum_^\tbinomp^
\]然後二項式定理就十分顯然了。
\[np(p+1)^
\]這部分就是複習白兔之舞了。
\[\sum_^n\sum_^[i\bmod k=t]\tbinomp^it
\]\[\sum_^n\sum_^[k|(i-t)]\tbinomp^it
\]把一開始的公式套進去
\[\sum_^n\sum_^\frac\sum_^\omega_k^\tbinomp^it
\]\[\frac\sum_^n\sum_^\sum_^\omega_k^\omega_k^\tbinomp^it
\]\[\frac\sum_^\sum_^t\omega_k^\sum_^n\tbinom\omega_k^p^i
\]後面那一串有點意思。
\[\frac\sum_^\sum_^t\omega_k^\sum_^n\tbinom(\omega_k^jp)^i
\]然後就把討厭的迴圈\(n\)次弄沒了
\[\frac\sum_^\sum_^t\omega_k^(\omega_k^jp+1)^n
\]所以只需要對於\(j\in[0,k])\)求出後面一串的值就行了。這裡用bluestein's algorithm
,\(ij=\tbinom-\tbinom-\tbinom\)
\[\frac\sum_^\sum_^t\omega_k^+\tbinom+\tbinom}(\omega_k^jp+1)^n
\]整理一下係數。
\[\frac\sum_^\omega_k^\tbinom(\omega_k^jp+1)^n\sum_^t\omega_k^}\times \omega_k^}
\]裡面隨便捲捲就好了。記\(c_=\text\),\(a_=i\omega_k^},b_=\omega_k^}\),有:
\[c_=\sum_^a_b_
\]卷積顯而易見。
再帶回去。
\[\frac\sum_^\omega_k^\tbinom(\omega_k^jp+1)^nc_
\]#includenamespace in
template inline void read(t& t)
while(isdigit(ch))if(f)t=-t;
} template inline void read(t& t, args&... args)
}namespace out
inline void putc(const char &x)
template void write(t x) while (x);}elsewhile(x);}
while (len>=0)putc(buf[len]),--len; }}
using namespace std;
templatestruct modint
modint&operator = (int o)
modint&operator +=(modinto)
modint&operator -=(modinto)
modint&operator *=(modinto)
modint&operator ^=(int b)
modint&operator /=(modinto)
modint&operator +=(int o)
modint&operator -=(int o)
modint&operator *=(int o)
modint&operator /=(int o)
templatefriend modintoperator +(modinta,i b)
templatefriend modintoperator -(modinta,i b)
templatefriend modintoperator *(modinta,i b)
templatefriend modintoperator /(modinta,i b)
friend modintoperator ^(modinta,int b)
friend bool operator ==(modinta,int b)
friend bool operator !=(modinta,int b)
bool operator ! ()
modintoperator - ()
modint&operator++(int)
};const int n=4e6+5;
const int mod=998244353;
const modintgg=3,ginv=modint(1)/3,i=86583718;
struct poly
int size()
void resize(int n)
void reverse()
};int rev[n];
inline poly one()
inline int ext(int n)
inline void ntt(poly&a,int k,int typ)
} }if(typ<0){
modintinv=modint(1)/n;
for(int i=0;imint;
int n=3,p=3,k=2;
static mint fac[20];
namespace solve{
mint w[n];
#define c2(i) (1ll*(i)*((i)-1)/2)
void run(){
w[0]=1;w[1]=mint(3)^((mod-1)/k);for(int i=2;ivector比較慢要o2才能過
luoguP5591 小豬佩奇學數學
由於存在一道題叫做白兔之舞就導致這道題看上去非常的板 如果按照這個方法推下來 約定,x 表示 x 向下取整 sum n dbinom times p i times dfrac 然後會想到可以將 dfrac 拆開變成 dfrac 於是原問題變成 sum n dbinom times p i time...
Python 畫小豬佩奇
我們將用python 畫出當下最時尚的小豬佩奇!直接上 from turtle import def nose x,y 鼻子 penup 提起筆 goto x,y 定位 pendown 落筆,開始畫 setheading 30 將烏龜的方向設定為to angle 為數字 0 東 90 北 180 西...
python畫小豬佩奇
coding utf 8 import turtle as t t.pensize 4 設定畫筆的大小 t.colormode 255 設定gbk顏色範圍為0 255 t.color 255,155,192 pink 設定畫筆顏色和填充顏色 pink t.setup 840,500 設定主視窗的大小...