AtCoder Beginner Contest 137 F

本文解析了AtCoderBeginnerContest137中的F题,利用费马小定理构造函数解决特定数学问题。通过定义函数g(x),使得x=i时g(x)=0,x≠i时g(x)=1,进而构造出f(x)来解决问题。
摘要由CSDN通过智能技术生成

AtCoder Beginner Contest 137 F

数论鬼题(虽然不算特别数论)

希望你在浏览这篇题解前已经知道了费马小定理

利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\)

\[x=i,g(x)=0\]

\[x\ne i ,g(x)=1\]

则我们可以构造

\[f(x)=\sum^{i=0}_{P-1}(-a_i*(x-i)^{P-1}+a_i)\]

对于第\(i\)条式子当且仅当\(a_i=1 \ and \ 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':' ');
    }
}

转载于:https://www.cnblogs.com/chasedeath/p/11333881.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值