给定n(范围3e7),求1 <= b <= a <= n,有多少对gcd(a,b) = a xor b
//a xor b = gcd (a , b) = c
//step1 证 a - b <= a xor b
//xor 可以看成不进位的加法,也可看成不借位的减法(0 - 1 = 1)
//a - b没有借位时 = a xor b
//有借位时a - b <= a xor b
//so a - b <= c
//step2 证 a - b >= gcd(a , b)
//c = gcd(a, b) = gcd(b,a % b) <= a % b <= a - b
//so c <= a - b
//sooo c = a - b when c = a xor b && c = gcd(a,b)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn = 3e7 + 1;
int cnt[maxn],sum[maxn];
void solve()
{
for (int c = 1; c < maxn; c ++ ) {
for (int a = 2 * c; a < maxn ;a += c) {//O(nlogn)
int b = a - c;
if((a ^ b) == c) cnt[a] ++;
}
}
for (int i = 1; i < maxn; i ++) {
sum[i] = sum[i - 1] + cnt[i];
}
}
int main()
{
int T;cin >> T;
int n;
solve();
for (int cn = 1; cn <= T; cn ++) {
scanf("%d",&n);
printf("Case %d: %d\n",cn,sum[n]);
}
return 0;
}