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;
}

 

posted @ 2020-08-02 16:51  杰瑞与汤姆  阅读(167)  评论(0编辑  收藏  举报