题目:
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84227#problem/H
题意:
求出1~n中gcd(a,b)= a^b的对数。
思路:
枚举最大公约数的两个数 且符合条件,记录。
AC.
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 3e7;
int num[maxn+10];
void init()
{
memset(num, 0, sizeof(num));
for(int i = 1; i <= maxn/2+1; ++i) {
for(int j = i*2; j <= maxn; j+=i) {
if((j ^ (j-i)) == i) {
num[j]++;
}
}
}
for(int i = 1; i <= maxn; ++i) {
num[i] += num[i-1];
}
}
int main()
{
//freopen("in", "r", stdin);
int T, ca = 1;
init();
scanf("%d", &T);
while(T--) {
int n;
scanf("%d", &n);
printf("Case %d: %d\n", ca++, num[n]);
}
return 0;
}