#include <bits/stdc++.h>
using namespace std;
#include <bits/stdc++.h>
using namespace std;
const int maxn = 3E7 + 10;
int kase, T, n, cnt[maxn];
void init()
{
int m = maxn / 2;
for (int i = 1; i <= m; i++)
for (int j = i * 2; j <= maxn; j += i)
if ((j ^ i) == j - i) cnt[j]++;
for (int j = 1; j <= maxn; j++)
cnt[j] += cnt[j - 1];
}
int main(int argc, char const *argv[])
{
init();
cin >> T;
while (T--)
{
cin >> n;
cout << "Case " << ++kase << ": " << cnt[n] << endl;
}
return 0;
}
紫书上有题解,照着写就能A,但重要的不是这个,是暴力打表gcd(a,b) == a xor b =c 可知c=a-b
所以对于不明确的数学题,打表找规律是有必要的。