【题解】UVA12716 GCD XOR
题意简述
(
-
1 \le b \le a \le n -
\gcd(a,b)=a \; xor \; b
数据范围:
分析 + 题解
题目给出的条件是
由样例解释可知,
首先,显然有
其次,显然有
综上,有
由于
代码
#include<bits/stdc++.h>
using namespace std;
int range;//max{n}
const int max_n=3e7+5;
long long ans[max_n];
inline void init()
{
for(int k=1;k<=range;++k)
for(int b=k;b+k<=range;b+=k)//按照上述方法枚举
{
int a=b+k;
if((b&a)==b)//注意运算优先级,要打括号
++ans[a];//此处差分,表示所有 >=a 的 n 的 ans++
}
for(int i=1;i<=range;++i)
ans[i]+=ans[i-1];//差分求前缀和
}
const int max_T=1e4+5;
int n[max_T];
int main()
{
int T;
scanf("%d",&T);
for(int i=1;i<=T;++i)
{
scanf("%d",n+i);
range=max(range,n[i]);
}
init();
for(int i=1;i<=T;++i)
printf("Case %d: %lld\n",i,ans[n[i]]);
return 0;
}