标签:style blog http io ar color os sp for
题意:
问整数n以内,有多少对整数a、b满足(1≤b≤a)且gcd(a, b) = xor(a, b)
分析:
gcd和xor看起来风马牛不相及的运算,居然有一个比较"神奇"的结论:
设gcd(a, b) = xor(a, b) = c, 则 c = a - b
有比较严格的证明。
有了这个结论后,我们可以枚举约数c,然后枚举c的倍数a,再根据c = a - b计算b,检验b是否满足gcd(a, b) = xor(a, b)
1 #include <cstdio> 2 const int maxn = 30000000; 3 int ans[maxn + 10]; 4 5 int main() 6 { 7 //freopen("12716in.txt", "r", stdin); 8 9 for(int c = 1; c <= maxn; c++) 10 { 11 for(int a = 2*c; a <= maxn; a += c) 12 { 13 int b = a - c; 14 if((a ^ c) == b) ans[a]++; 15 } 16 } 17 for(int i = 1; i <= maxn; ++i) ans[i] += ans[i-1]; 18 19 int T, n; 20 scanf("%d", &T); 21 for(int kase = 1; kase <= T; ++kase) 22 { 23 scanf("%d", &n); 24 printf("Case %d: %d\n", kase, ans[n]); 25 } 26 27 return 0; 28 }
UVa 12716 (GCD == XOR) GCD XOR
标签:style blog http io ar color os sp for
原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/4162682.html