AtCoder 초급 대회 137 F

AtCoder 초급 대회 137 F

정수론의 유령 문제 (안 특히 정수론하지만)

난 당신이 솔루션은 페르마의 리틀 정리 알려져되기 전에이 문제를 볼 희망

생성자 이용한 페르마의 소정리 \ (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) ^ {- 1} P + A_I) \]

제 들어 \ (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':' ');
    }
}

추천

출처www.cnblogs.com/chasedeath/p/11333881.html