题意:
有一个严格递增的数组 ,另有一数组 ,问满足使 严格递增的数组 的个数
因为 严格递增,所以若想使 也严格递增则同一最高位在 中至多出现一次,比如 只能有一个,也可以都不选。
每个最高位可选的情况有 个,
第二个 代表不选取最高位为该位的数,也因此最后乘积需要减去一个所有位都没选取的情况。
AC代码:
const int N = 1e5 + 10;
int n, m, d;
int main()
{
int t;
sd(t);
while (t--)
{
sdd(d, m);
int b[32] = {};
int t = d;
for (int i = 0; t; i++)
{
b[i] = min((1 << (i + 1)) - 1, d) - (1 << i) + 2;
t >>= 1;
}
ll ans = 1;
for (int i = 0; b[i]; i++)
ans = ans * b[i] % m;
ans--;
ans += m;
ans %= m;
pd(ans);
}
return 0;
}