初心者コンテスト137 F AtCoder
数論のゴーストの問題(ではない、特に数論が)
ソリューションは、フェルマーの小定理を知られていた前に、私はあなたがこの問題を見る願っています
コンストラクタを使用して、フェルマーの小定理\(G(X)=( XI)を、^ {P-1} \)
\ [X = I、G(X)= 0 \]
\ [X \ NE I、G(X)= 1 \]
その後、我々は構築することができます
\ [F(X)= \和^ {i = 0} _ {P-1}( - a_iを×(XI)^ {P-1} + a_iを)\]
最初のために\(私は\)条式の場合に限り、\(a_iを= 1 \と\ X = I \) にかかった時間\(1 \)
比較的奇妙で書かれたコード
const int N=3100;
int P,a[N];
int po[N]={1},Inv[N]={1,1};
int b[N];
int C(int n,int m){
if(n<0||m<0||n<m) return 0;
return po[n]*Inv[m]%P*Inv[n-m]%P;
}
int fl=0;
int main(){
P=rd();
rep(i,1,P+1) po[i]=po[i-1]*i%P;
rep(i,2,P-1) Inv[i]=(P-P/i)*Inv[P%i]%P;
rep(i,2,P+1) Inv[i]=Inv[i]*Inv[i-1]%P;
rep(i,0,P-1) {
if(rd()) {
fl=1;
int t=1;
drep(j,P-1,0) b[j]+=C(P-1,j)%P*t%P,t=t*(P-i)%P;
} else b[0]++;
}
rep(i,0,P-1) {
int x=(P-b[i])%P;
x=(x%P+P)%P;
printf("%d%c",x,(i==P-1)?'\n':' ');
}
}