[数学 找规律] BZOJ 3823 定情信物

来源:互联网 发布:淘宝电视盒子 编辑:程序博客网 时间:2024/04/30 23:36

%%% zky http://blog.csdn.net/iamzky/article/details/42211705


加强数据,被卡出屎,不知道WA了几发


对比下列算式:

(x+2)^0=1

(x+2)^1=x+2

x+2)^2=x²+4x+4

(x+2)^3=x^3+6x^2+12x+8

可以归纳出:一个n维立方形(n-cube)所包含的k维元素个数等于(x+2)^n展开式的k次项系数。

(x+2)^4=x^4+8x^3+24x^2+32x+16


#include<cstdio>  #include<cstring>  #include<iostream>  #include<algorithm>using namespace std;  typedef long long ll;ll n,P; const int N=10000000;ll inv[N+5]; inline ll Pre(){    inv[1]=1;    for (int i=2;i<=min(n,P-1);i++)inv[i]=(ll)(P-P/i)*inv[P%i]%P;    ll ret=1;    for (int i=1;i<=n;i++)        ret=ret*2%P;    return ret;}int main()  { freopen("t.in","r",stdin);freopen("t.out","w",stdout);ll Xor=0,itmp,t,cnt=0;    cin>>n>>P;    itmp=Pre();    Xor^=itmp;for(int i=1;i<=n;i++){          t=n-i+1;          while(t%P==0) cnt++,t/=P;          (itmp*=t)%=P;        t=i;        while(t%P==0) cnt--,t/=P;          (itmp*=inv[t%P]*inv[2]%P)%=P;          Xor^=cnt?0:itmp;      }    cout<<Xor<<endl;    return 0;  }  


0 0