这个题很容易想成枚举a,但是就没法找c了,后来想枚举c找a。其它看代码吧。
/*************************************************************************
> File Name: 1.cpp
> Author: bxf
> Mail: bbb546754186@vip.qq.com
> Created Time: 2014年08月11日 星期一 09时30分05秒
************************************************************************/
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <set>
#include <cstdio>
#include <string>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>
#define INF 0xfffffff
#define maxn 30000000 + 10
#define ll long long
#define ull unsigned long long
using namespace std;
int ans[maxn];
void init()
{
int len = maxn/2;
for(int c = 1; c <= len; ++c)
{
for(int a = c+c; a <= maxn; a += c)
{
int b = a-c;
int tmp = a^b;
if(tmp == c)
++ans[a];
}
}
for(int i = 1; i <= maxn; ++i)
ans[i] += ans[i-1];
}
int main()
{
int t, kase = 0;
init();
scanf("%d", &t);
while(t--)
{
int n;
scanf("%d", &n);
printf("Case %d: %d\n", ++kase, ans[n]);
}
return 0;
}