1. 程式人生 > 實用技巧 >2020牛客多校第六場B題Binary Vector(數論逆元打表)

2020牛客多校第六場B題Binary Vector(數論逆元打表)

https://blog.csdn.net/qq_45845404/article/details/107736792這個部落格講的很清楚。惡補線性代數。

題解:菜雞找規律,猛男推公式。

#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=2e7+7;
const ll mod =1e9+7;
ll f[maxn],inv[maxn];
void init(){ f[1]=500000004;inv[0]=1; for(int i=1;i<maxn;i++){ inv[i]=inv[i-1]*500000004; inv[i]%=mod; } for(int i=1;i<maxn;i++){ inv[i]=inv[i]*inv[i-1]; inv[i]%=mod; } ll tmp=1,p=1; for(int i=1;i<=maxn;i++){ p=p*2; p%=mod; tmp
=(p-1)*tmp %mod; f[i]=tmp*inv[i]%mod; } for(int i=1;i<maxn;i++){ f[i]=f[i]^f[i-1]; } } int main(){ IOS int t,n; init(); cin>>t; while(t--){ cin>>n; cout<<f[n]<<endl; } return 0; }