GCD XOR UVA - 12716 刷表/贡献
//#pragma comment(linker, "/STACK:1024000000,1024000000") //#include<bits/stdc++.h> #include<stdio.h> #include<algorithm> #include<queue> #include<string.h> #include<iostream> #include<math.h> #include<set> #include<map> #include<vector> #include<iomanip> using namespace std; #define ll long long #define pb push_back #define FOR(a) for(int i=1;i<=a;i++) const double PI = acos(-1.0); const int maxn=3e7+7; int C[maxn]; void init(){ for(int c=1;c<=maxn/2;c++){ //c作为因子枚举倍数a for(int a=c+c;a<=maxn;a+=c){ int b=a-c; if(c==(a^b))C[a]++; } } for(int i=2;i<=maxn;i++){ C[i]+=C[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,C[n]); } }
贡献相关,最近做到不少了
gcd(a,b)=c && a^b==c 必然有c==a-b
这种规律对于我,在比赛的时候只能靠打表才发现,不会笔算不要紧。。