題解 P5591 小豬佩奇學數學

2022-05-19 08:40:40 字數 3346 閱讀 3196

\[\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 設定主視窗的大小...