为什么最后四个点 WA 了?
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define io ios::sync_with_stdio(0), cin.tie(), cout.tie()
const ll _n = 1e6 + 1, _mod = 1e9 + 7;
ll t, n, m, lg2[_n], fc[_n] = {1};
ll qpow(ll x, ll y){
if (!y) return 1;
if (y == 1) return x;
ll z = qpow(x, y >> 1);
if (y & 1) return z * z % _mod * x % _mod;
return z * z % _mod;
}
void init(){
ll k = 0;
for (ll i = 1; i < _n; i++) lg2[i] = ceil(log2(i));
for (ll i = 1; i < _n; i++) fc[i] = fc[i - 1] * i % _mod;
}
signed main(){
init();
cin >> t;
while (t--) cin >> n, m = lg2[n], cout << qpow(fc[m] * fc[(1 << m) - n] % _mod, _mod - 2) * fc[1 << m] % _mod << '\n';
return 0;
}