牛客练习赛54-A 乘积

牛客练习赛54-A 乘积

牛客练习赛54-A 乘积_第1张图片
牛客练习赛54-A 乘积_第2张图片

找规律+快速幂
解析:可以发现Ai & Aj = min(Ai, Aj)
然后枚举 i 试着写一下公式
牛客练习赛54-A 乘积_第3张图片
很容易找到规律,将上述 枚举 i 得到的结果再连乘 得到以下结果,照着敲就好了(快速幂可以去看一下其他的博客,这里就不介绍了)
牛客练习赛54-A 乘积_第4张图片
这里贴一下代码

#include 
using namespace std;
typedef unsigned long long ll;
const int mod = 998244353;
ll a[65];
ll ksm(ll x, ll n){
    if(x==1)return 1;
    ll ans=1;
    while(n){
        if(n&1)ans = ans*x%mod;
        x = x*x%mod;
        n >>= 1;
    }
    return ans;
}
int main(){
    a[1] = 1;
    for(ll i=1; i<=63; i++){
        a[i+1] = (1ll<<i) | a[i];
        a[i+1] %= mod;
    }
    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        ll ans=1;
        for(int i=1; i<=n; i++){
            ans = ans*ksm(a[i], (n-i)*2+1)%mod;
        }
        cout << ans << endl;
    }
}

你可能感兴趣的:(牛客题解,模拟题,算法,c++)