uva12716 GCD XOR
个人博客:http://acbingo.cn/2015/06/04/uva12716/
被紫薯上*和素数筛法类似*这句话给误解了= =,一直以为存在某种关系,在枚举c或者a时,可以根据当前的答案,筛掉一些后面的值。。。结果想了好长时间也没想明白。
还是枚举c比较简单,因为c是a的约数,然后根据c生成a。
#define maxn 30000000 int cnt=0; int v[maxn]={0}; int a,b,c,n; int init(){ for (c=1;c<=maxn/2;c++) for (a = c + c ; a <= maxn ; a += c){ b=a-c; if (c==(a^b)) v[a]++; } for(int i = 2 ; i <= maxn ; i++) v[i] += v[i - 1]; } int main (int argc, char* argv[]) { int T; scanf("%d",&T); int cas=0; init(); while (T--){ cas++; scanf("%d",&n); int ans=0; //for (int i=1;i<=n;i++) ans+=v[i]; printf("Case %d: %d\n",cas,v[n]); } return 0; }