Binary Vector【公式】-2020牛客暑期多校6
阿新 • • 發佈:2020-07-27
題意:
分析:
當時時根據樣猜出的公式:\(f(n)=\frac{\prod_{n}^{i=1}{(2^i-1)}}{2^{\frac{n(n+1)}{2}}}\)
然後地遞推求出 \(2^n\) 的逆元,預處理答案即可。注意超時和超記憶體。
程式碼:
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e9+7; const int N=2e7+5; ll ans[N],tmp[N],res[N]; ll power(ll a,ll b) { ll res=1; while(b) { if(b&1) res=res*a%mod; a=a*a%mod; b>>=1; } return res; } void init() { ll tv=power(2LL,mod-2); ll inv=1; tmp[1]=2; for(int i=2;i<=2e7;i++) tmp[i]=tmp[i-1]*2%mod; ans[0]=1,res[0]=0; for(int i=1;i<=2e7;i++) { inv=inv*tv%mod; ans[i]=(ans[i-1]*(tmp[i]-1+mod)%mod*inv)%mod; } for(int i=1;i<=2e7;i++) res[i]=res[i-1]^ans[i]; } int main() { int t,n; scanf("%d",&t); init(); while(t--) { scanf("%d",&n); printf("%lld\n",res[n]); } return 0; }